Vorlage Dokumentation#proc
Allgemeines
   Aufruf
   Einleitung
   Installation
   Konfiguration
   Syntax
Einführung
   MetabefehlsAusdruecke
   MetabefehlsSyntax
   RegulaereAusdruecke
   VordefinierteVariablen
Funktionen
   abs()
   after()
   and()
   antoi()
   before()
   ceil()
   change()
   close()
   crop()
   equals()
   exp()
   flatten()
   float()
   floor()
   int()
   isnothing()
   itoan()
   length()
   log()
   log10()
   match()
   not()
   open()
   or()
   random()
   read()
   readline()
   sign()
   status()
   statustext()
   substr()
   system()
   time()
   tolower()
   toupper()
   typeof()
   write()
   writeline()
   xname()
   xor()
Metabefehle
   #after
   #array
   #break
   #call
   #config
   #const
   #debug
   #default
   #dict
   #else
   #every
   #forever
   #func
   #if
   #ifregion
   #ifunit
   #include
   #input
   #message
   #next
   #notrace
   #proc
   #return
   #sort
   #table
   #tag
   #trace
   #var
   #while
Rückruf-Prozeduren
   CalcUnitCapacities
   CreateRegionHeader
   CreateUnitHeader
   EndRegion
   EndUnit
   OnBuilding
   OnExit
   OnInit
   OnRegion
   OnShip
   OnUnit
   OutputLineFilter
Report-Objekte
   building
   grenze
   partei
   preise
   races
   region
   report
   ship
   things
   unit
Anhang
   Danksagungen
   SkriptDebugger
   VorlageFAQ

#proc

Implementation eines Unterprogramms

Syntax

#proc <Name> [$<Argname1> [$<Argname2> [...]]]

Beschreibung

Dieser Metabefehl ermöglicht es eigene Unterprogramme zu schreiben, die dann in der Zugvorlage (oder anderen Unterprogrammen) verwendet werden können. Es können mehrere Parameter festgelegt werden die dem Unterprogramm dann beim Aufruf als Variable übergeben werden.

Soll ein Parameter von dem Unterprogramm aus verändert werden können, so muß dieser im Unterprogramm durch ein 'Kaufmanns-Und' gekennzeichnet werden (z.b. &$Argname). Eine Zuweisung an diese Variable (benutzt wird sie in dem Unterprogramm ohne das Kennzeichen) verändert dann den Parameter im #call-Aufruf der Vorlage.

ALERT! ACHTUNG: Vorlage unterstützt keine echten Referenzen, so das dieses Feature in erster Linie dazu gedacht ist um Parameter aus Aufrufen in der Zugvorlage zu verändern).

Eine Prozedur kann an beliebiger Stelle mittels #return verlassen werden.

Prozeduren werden genauso wie Funktionen in eine externe Skript-Datei geschrieben und diese beim Aufruf von Vorlage mit der Option '-i' eingebunden. Sie können nicht direkt in der Zugvorlage geschrieben werden.

Man kann im Kopf der Prozedur durch anhängen von drei Punkten (...) erreichen, das auch mehr Parameter als vorgegeben verwendet werden dürfen. Gibt man nur drei Punkte an, so ist die Prozedur bereits ohne Parameter aufrufbar, aber es können beliebig viele übergeben werden.

Alle Parameter eines Prozedur-Aufrufes stehen nicht nur in den benannten Parameter-Variablen, sondern auch in einem feldartigen Spezialobjekt namens ARG. Die Anzahl der Parameter mit der eine Prozedur aufgerufen wurde steht dabei in ARG.SIZE und die Parameter selber in ARG[] für von 0 bis ARG.SIZE-1.

Veränderliche Referenzvariable (die im Prozedurkopf ein & vor dem Parameternamen haben) können auch zuweisend über ARG verändert werden.

ALERT! ACHTUNG: Der interne Mechanismus erfordert (noch), das die #proc-Zeile alleine steht und die '{' des Unterprogrammes in der nächsten Zeile. Es gibt also keine Einzeiler-Prozeduren.

Beispiel

Gegeben sei ein Unterprogramm:

#proc Holzfaeller $Bestand
{
    $h=region.baeume-$Bestand
    #if $h>0 { MACHE $h Holz } else { LERNE Holzfaellen }
}

Dann kann es wie folgt genutzt werden:

EINHEIT f00; Die Holzer [5,150$] hinten
  // #call Holzfaeller 600
  ; Eine Runde noch ohne Automatisierung holzen:
  MACHE Holz

Das ergibt z.b. bei einem Baumbestand von 630 in der Region in der nächsten Vorlage:

EINHEIT f00; Die Holzer [5,100$] hinten
  // #call Holzfaeller 600
  MACHE 30 Holz

Referenzen

#call, #func, #return

Revision 22 Jul 2003

Page design, graphics and contents (c) copyright 1999-2004
by S.Schümann and contributing authors