name()

FUNKTION:
     varargs string name(int casus, int demon);

DEFINIERT IN:
     /std/thing/description.c

ARGUMENTE:
     casus
          Der Fall, in dem der Name dekliniert werden soll.
     demon
          Gibt an, ob der Name mit bestimmtem oder unbestimmtem Artikel
          versehen werden soll:
             + demon = 0: Unbestimmter Artikel.
             + demon = 1: Bestimmter Artikel.
             + demon = 2: Finde selbst heraus, ob ein bestimmter oder ein
               unbestimmter Artikel verwendet werden soll.

BESCHREIBUNG:
     Diese Funktion ermittelt den Namen des Objektes im gewuenschten Fall
     und mit dem angegebenen Artikel. Moegliche Werte fuer casus sind in
     <thing/language.h> definiert. Weiterhin werden auch (falls angegeben)
     die Namensadjektive dekliniert und in den Namen eingebaut.

RUeCKGABEWERT:
     String mit dem Namen des Objektes.

BEMERKUNGEN:
     Falls P_ARTICLE gesetzt ist, werden weder Artikel noch Namensadjektive
     in den Namen eingebaut.

     Wenn man als casus RAW angibt, wird der Name im Nominativ ohne Artikel
     und Namensadjektive zurueckgegeben.

BEISPIELE:
     Wenn das Objekt ein Ball mit P_NAME="Ball" und P_NAME_ADJ="klein" ist,
     so liefern die folgenden Aufrufe die angegebenen Ergebnisse:

     name(WER,0);    => "ein kleiner Ball"
     name(WESSEN,1); => "des kleinen Balls"
     name(RAW);      => "Ball"
     name(WEM,2);    => "einem kleinen Ball" oder "dem kleinen Ball",
                        abhaengig davon, wieviele Baelle gerade da sind.

SIEHE AUCH:
     /std/thing/description.c, Name()

----------------------------------------------------------------------------
Last modified: Sat Aug  3 11:28:55 2002 by Vanion
