SetProperties()
***************


FUNKTION
========

   void SetProperties(mapping props);


DEFINIERT IN
============

   /std/thing/properties.c


ARGUMENTE
=========

   props      - Mapping mit den Daten fuer alle Properties


BESCHREIBUNG
============

   Diese Funktion setzt angegebene Properties auf einen Schlag.
   Mapping muss wie folgt aufgebaut sein:
      ([ name: wert; flags; set_method; query_method,
         name2: ... ]);


BEMERKUNGEN
===========

   - diese Funktion wird von restore_object() verwendet, um nicht alle
     restaurierten Properties einzeln setzen zu muessen.
   - SECURED/PROTECTED/NOSETMETHOD Properties werden beruecksichtigt


SIEHE AUCH
==========

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

1.Mai 2004 Gloinson
