SetProp()
FUNKTION:
     public mixed SetProp(string name, mixed Value);

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

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

