SetProp()
=========

FUNKTION
--------
::

     public mixed SetProp(string name, mixed Value,
                          int drop_priv = extern_call());

DEFINIERT IN
------------
::

     /std/thing/properties.c
     /sys/thing/properties.h (Prototyp)

ARGUMENTE
---------
::

     name	- Property, deren Wert veraendert werden soll.
     Value	- Wert, auf den der Inhalt der Property gesetzt werden soll
     drop_priv  - Interne Verwendung, wenn Aufrufer Privilegien abgibt,
                  z.B. objekt-interner Aufruf extern zaehlen soll.

BESCHREIBUNG
------------
::

     Der Datenwert der Property 'name' wird auf den Wert 'Value' gesetzt.

     Existiert eine F_SET_METHOD oder eine _set_'name'()-Methode fuer
     diese Property, so wird diese aufgerufen und ihr 'Value' uebergeben.
     Eine F_SET_METHOD hat dabei Vorrang vor _set_'name'(), d.h.
     _set_'name'() wird nach erfolgreicher F_QUERY_METHOD nicht mehr
     gerufen.

     (Diese Methoden nutzen dann Set(), um den Datenwert der Property
      'name' zu aendern. Teilweise werden aber auch interne Variablen so
      oeffentlich gemacht und sind nicht in der ueber Set/Query verfuegbaren
      Property 'name' abgelegt.)

RUeCKGABEWERT
-------------
::

     Der Wert, der nun in der Property gespeichert ist.
     In der Regel ist das 'Value'. Wenn die Property ueber eine SET_METHOD
     oder eine _set_'name'()-Funktion verfuegt und diese 'Value' aendert
     (zum Beispiel, indem sie 'Value' an einen bestimmten erlaubten
     Wertebereich anpasst), kann der Rueckgabewert jedoch auch veraendert
     sein.

     Wenn die Property nicht veraendert werden darf, wird -1 zurueckgegeben.

BEISPIELE
---------
::

     // geben wir dem Zwerg eine Kurzbeschreibung
     SetProp(P_SHORT, "Ein kleiner Zwerg");

SIEHE AUCH
----------
::

     Aehnliches:	QueryProp(L), Set(L), Query(L)
     Generell:		SetProperties(L), QueryProperties(L)
     Konzept:		properties, /std/thing/properties.c

15.Dez 2004 Gloinson

