
QueryValidObject()
******************


FUNKTION
========

   public int QueryValidObject(string oname);


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

   /std/virtual/v_compiler.c


ARGUMENTE
=========

   oname
     Objektname, der geprueft werden soll (kompletter Pfad mit / am Anfang)


RUeCKGABEWERT
=============

   <=0 - falls VC nicht zustaendig ist.
   >0 - falls der VC sich fuer das Objekt zustaendig erklaert.


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

   Ueber die Funktion laesst sich herausfinden, ob ein VC sich fuer das
   gewuenschte Objekt zustaendig fuehlt. Dabei wird Validate(),
   P_COMPILER_PATH, NoParaObjects() und P_PARA im VC ausgewertet:
   1. Zuerst wird mit Validate() geprueft, ob der Filename (ohne Pfad) ok ist.
   2. wird geguckt, ob das angefragte Objekt im richtigen Pfad liegt
      (P_COMPILER_PATH).
   3. wenn das angefragte Objekt ein Para-Objekt ist:
     a) wird NoParaObjects() geprueft, wenn das !=0 ist, sind gar keine Para-
        Objekte erlaubt.
     b) wird P_PARA _im VC_ abgefragt, dort kann man ein Array aller
        erlaubten Para-Dimensionen reinschreiben. Fuer alle anderen erklaert
        sich der VC fuer nicht zustaendig. Wenn P_PARA nicht gesetzt ist,
        sind alle erlaubt. Ein leeres Array ({}) wuerde einem
        NoParaObjects() {return 1;} entsprechen.


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

   Diese Funktion wird vom move abgefragt. Bitte auf jeden Fall P_PARA oder
   NoParaObjects() passend definieren, sonst buggts.

   Wenn jemand mit dem oben beschrieben Standardverhalten nicht gluecklich
   ist, kann man die Funktion passend ueberschreiben.


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

   virtual_compiler
   CustomizeObject(), Validate(), NoParaObjects(),
   P_COMPILER_PATH, P_PARA
   /std/virtual/v_compiler.c

21.10.2007, Zesstra
