home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / mouse / u_mouse / u_object.prg < prev   
Encoding:
Text File  |  1990-09-04  |  2.8 KB  |  127 lines

  1. ********************
  2. ********************
  3. **
  4. **   Source File ... U_Object.PRG
  5. **
  6. **   Application ...
  7. **                   Copyright (c) 1990 Lamaura Development Limited
  8. **                   All Rights Reserved
  9. **
  10. **   Author ........ Philip de Lisle
  11. **   Last Update ... 5 September 1990 at 02:08 AM
  12. **   Purpose ....... User Defined Object Evaluator
  13. **
  14. ********************
  15. ********************
  16.  
  17.  
  18. *|
  19. *|  CAUTION - MUST BE COMPILED WITH /N SWITCH
  20. *|
  21.  
  22. #include 'object.ch'
  23.  
  24.  
  25. static saObj := {}
  26.  
  27.  
  28. function OEval(aObj, cMsg, cArg, bSet)
  29. **
  30. **  Syntax ..... OEVAL(<A>, <C>, <exp>, <L>)
  31. **
  32. **  Purpose .... Evaluate an Object
  33. **
  34. **  Argument ... <A>   = Object Array
  35. **               <C>   = Message
  36. **               <exp> = Expression of some sort
  37. **               <L>   = Export Instance Variable?
  38. **
  39. **  Returns .... Expression
  40. **
  41.  
  42. local b
  43.  
  44. #ifdef DEBUG
  45.        if valtype(aObj) # "A"
  46.           ListStack("OEval() : Invalid Object -> " + valtype(aObj))
  47.        endif
  48.  
  49.        if valtype(cMsg) # "C"
  50.           ListStack("OEval() : Invalid Message or Method -> " + cMsg)
  51.        endif
  52. #endif
  53.  
  54. aObj[OBJ_NAME] := upper(aObj[OBJ_NAME])
  55.  
  56. b := ObjectKnown(aObj[OBJ_NAME])
  57. if b == nil
  58.    b := "{|aObj, cMsg, cArg, bSet| Eval" + ;
  59.            aObj[OBJ_NAME] + ;
  60.            "(aObj, upper(cMsg), cArg, bSet)}"
  61.    b := &b
  62.    aadd(saObj, {aObj[OBJ_NAME], b})
  63. endif
  64.  
  65. return (eval(b, aObj, cMsg, cArg, bSet))
  66. *| EOF OEval
  67.  
  68. *|----------------------------------------------------------------------------|*
  69.  
  70. static function ObjectKnown(cObj)
  71. **
  72. **  Syntax ..... OBJECTKNOWN(<C>)
  73. **
  74. **  Purpose .... Scan static array for Object Name
  75. **
  76. **  Argument ... <C> = Object Name
  77. **
  78. **  Returns .... Codeblock
  79. **
  80.  
  81. local k, i
  82.  
  83. for i := 1 to len(saObj)
  84.     if saObj[i,1] == cObj
  85.        k := saObj[i,2]
  86.        exit
  87.     endif
  88. next
  89.  
  90. return (k)
  91. *| EOF ObjectKnown
  92.  
  93. *|----------------------------------------------------------------------------|*
  94.  
  95. function InstanceVar(oMenu, nVar, cArg, bSet)
  96. **
  97. **  Syntax ..... INSTANCEVAR(<A>, <N>, <exp>, <L>)
  98. **
  99. **  Purpose .... To Set/Return Exported Instance Variable
  100. **
  101. **  Argument ... <A>   = Menu Object/Array
  102. **               <N>   = Instance Variable No.
  103. **               <exp> = Instance Variable Assignment Expression
  104. **               <L>   = Is Instance Variable Exported (rather than Set)?
  105. **
  106. **  Returns .... Expression
  107. **
  108.  
  109. #ifdef DEBUG
  110.        if valtype(oMenu) # "A"
  111.           ListStack("InstanceVar() : Invalid Object -> " + valtype(oMenu))
  112.        endif
  113.  
  114.        if valtype(nVar) # "N"
  115.           ListStack("InstanceVar() : Invalid Instance Variable # -> " + nVar)
  116.        endif
  117. #endif
  118.  
  119. if bSet
  120.    oMenu[OBJ_INSTANCE, nVar] := cArg
  121. endif
  122.  
  123. return (oMenu[OBJ_INSTANCE, nVar])
  124. *| EOF InstanceVar
  125.  
  126. *|----------------------------------------------------------------------------|*
  127.