Validate()

FUNKTION:
   string Validate(string oname);

DEFINIERT IN:
   /std/virtual/v_compiler.c

ARGUMENTE:
   oname
       Objektname, der geprueft werden soll 

RUeCKGABEWERT:
   
BESCHREIBUNG:
   Diese Funktion hat die Aufgabe zu ueberpruefen ob ein Objekt welches
   geladen werden soll, in dem VC  ueberhaupt erlaubt ist. Dieser 
   Funktion wird nur der reine Filename uebergeben, ohne Pfad!
   Diese Funktion macht im Standard-VC in /std/ nichts weiter, als
   das '.c' am File Namen abzuschneiden.
   Sollte der Dateiname gueltig sein liefert die Funktion als Rueckgabewert
   den Filenamen ohne .c und sonst 0.

BEMERKUNGEN:
   Am besten ruft man in seinem Validate() das ::Validate(), was einem die
   Arbeit abnimmt, ein .c am Ende zu entfernen.

BEISPIEL:
   string Validate(string oname) {
     string raum, spieler;
     //.c abschneiden
     oname=::Validate(oname);
     
     // folgt der Raum dem Muster "arena|name"? Wenn nein -> ungueltig,
     // 0 zureckgeben, sonst den Filenamen.
     if(sscanf(oname,"%s|%s",raum,spieler)<2 || raum!="arena")
        return 0;
     return oname;
   }

SIEHE AUCH:
     virtual_compiler
     CustomizeObject(), Validate(), NoParaObjects(), 
     P_COMPILER_PATH, P_PARA
     /std/virtual/v_compiler.c
----------------------------------------------------------------------------
27.10.2007, Zesstra
