home *** CD-ROM | disk | FTP | other *** search
- ********************
- ********************
- **
- ** Source File ... U_Object.PRG
- **
- ** Application ...
- ** Copyright (c) 1990 Lamaura Development Limited
- ** All Rights Reserved
- **
- ** Author ........ Philip de Lisle
- ** Last Update ... 5 September 1990 at 02:08 AM
- ** Purpose ....... User Defined Object Evaluator
- **
- ********************
- ********************
-
-
- *|
- *| CAUTION - MUST BE COMPILED WITH /N SWITCH
- *|
-
- #include 'object.ch'
-
-
- static saObj := {}
-
-
- function OEval(aObj, cMsg, cArg, bSet)
- **
- ** Syntax ..... OEVAL(<A>, <C>, <exp>, <L>)
- **
- ** Purpose .... Evaluate an Object
- **
- ** Argument ... <A> = Object Array
- ** <C> = Message
- ** <exp> = Expression of some sort
- ** <L> = Export Instance Variable?
- **
- ** Returns .... Expression
- **
-
- local b
-
- #ifdef DEBUG
- if valtype(aObj) # "A"
- ListStack("OEval() : Invalid Object -> " + valtype(aObj))
- endif
-
- if valtype(cMsg) # "C"
- ListStack("OEval() : Invalid Message or Method -> " + cMsg)
- endif
- #endif
-
- aObj[OBJ_NAME] := upper(aObj[OBJ_NAME])
-
- b := ObjectKnown(aObj[OBJ_NAME])
- if b == nil
- b := "{|aObj, cMsg, cArg, bSet| Eval" + ;
- aObj[OBJ_NAME] + ;
- "(aObj, upper(cMsg), cArg, bSet)}"
- b := &b
- aadd(saObj, {aObj[OBJ_NAME], b})
- endif
-
- return (eval(b, aObj, cMsg, cArg, bSet))
- *| EOF OEval
-
- *|----------------------------------------------------------------------------|*
-
- static function ObjectKnown(cObj)
- **
- ** Syntax ..... OBJECTKNOWN(<C>)
- **
- ** Purpose .... Scan static array for Object Name
- **
- ** Argument ... <C> = Object Name
- **
- ** Returns .... Codeblock
- **
-
- local k, i
-
- for i := 1 to len(saObj)
- if saObj[i,1] == cObj
- k := saObj[i,2]
- exit
- endif
- next
-
- return (k)
- *| EOF ObjectKnown
-
- *|----------------------------------------------------------------------------|*
-
- function InstanceVar(oMenu, nVar, cArg, bSet)
- **
- ** Syntax ..... INSTANCEVAR(<A>, <N>, <exp>, <L>)
- **
- ** Purpose .... To Set/Return Exported Instance Variable
- **
- ** Argument ... <A> = Menu Object/Array
- ** <N> = Instance Variable No.
- ** <exp> = Instance Variable Assignment Expression
- ** <L> = Is Instance Variable Exported (rather than Set)?
- **
- ** Returns .... Expression
- **
-
- #ifdef DEBUG
- if valtype(oMenu) # "A"
- ListStack("InstanceVar() : Invalid Object -> " + valtype(oMenu))
- endif
-
- if valtype(nVar) # "N"
- ListStack("InstanceVar() : Invalid Instance Variable # -> " + nVar)
- endif
- #endif
-
- if bSet
- oMenu[OBJ_INSTANCE, nVar] := cArg
- endif
-
- return (oMenu[OBJ_INSTANCE, nVar])
- *| EOF InstanceVar
-
- *|----------------------------------------------------------------------------|*
-