From: Michael H. <mh...@in...> - 2002-04-01 08:57:16
|
Wieder was neues: :) util.tf wie schon angekuendigt, gibts jetzt /ifdef zum bedingten Definieren von Makros, ihr koennt das gerne in euren Files einsetzen um z.b. gildenabhaengige (subgilden?) makros zu definieren (oder halt nicht). Man kann auch Makros definieren, abhaengig davon, ob schon ein anderes File geladen worden ist. Syntax: /ifdef expression Makrodefinition Bsp: /ifdef (p_sub_guild=~"abwehr") \ -t"bla ZSchild bla" t_zaubi_zschild = \ .... /ifdef (is_file_loaded("status.tf")) sl_lp = \ /init_var p_lp ... ----------------------------------------------------------------------- Eine andere Sache, die schon vielen TF-Entwickler den Verstand geraubt hat, sind verschachtelte Makrodefinitionen, um dem Abhilfe zu verschaffen (und auch andere nette Dinge zu tun) hab ich /region geschrieben, dass einen Bereich eines Makros vor der Substitution schuetzt Wer aus Shellscripten cat <<EOF ... EOF kennt wird sich schnell damit anfreunden koennen Syntax: /return /return region('%0','MARKER')%;....Makrotext....MARKER Beispiel: /def x = \ /purge y%;\ /purge z%;\ /return region('%0','EOF')%;\ /def -msimple -t"Das ist ein Test" y = \ /echo def%;\ /return region('%0','YYY')%;\ /def z = /echo zzz%;/echo zzz2%;YYY\ /echo def2%;\ EOF\ /echo abc2%;\ /trigger Das ist ein Test An dem Beispiel kann man folgendes sehen: * die Definition von y und z muss nicht durch %%; bzw. %%%; beschuetzt werden! * /region kann man verschachteln * es ist einfach anzuwenden Was passiert: 1. Makros y,z geloescht 2. Region fuehrt alles bis EOF aus, d.h. definition von y 3. x wird weiter ausgefuehrt d.h. /echo abc2 und y wird per /trigger aktiviert (nur zur Demonstration) 4. dadurch wird y ausgefuehrt, es gibt /echo def aus und das darin enthaltene /region fuehrt die Region bis YYY aus und definiert damit z mit /def z=/echo zzz%;/echo zzz2%; 5. dann wird das zweite /echo von y -> /echo def2 ausgefuehrt nach Ablauf des Makros x und Aktivierung von y gibt es x y z ------------------------------------------------------------------------- das mkdir in util.tf kann jetzt auch rekursiv Verzeichnisse anlegen, falls sie noch nicht existierten und mit dem Parameter -a fragt es vorher nach, ob es das angegebene Verzeichnis anlegen soll ************************************************************************* util.vfunc.tf Damit mehrere Variablen auf einen Statuszeilenplatz abgebildet werden koennen (und vielleicht auch noch zu anderen Zwecken) kann man jetzt Variablenabhaengigkeiten angeben, wenn die Variable von der die anderen abhaengig sind, gesetzt wird, werden die anderen auch aktualisiert (zur Zeit nur per /self_update wieder auf den Wert gesetzt um eine Statuszeilenaktualisierung hervorzurufen, denkbar ist aber auch die Angabe einer Funktion, die die Aktualisierung ausfuehrt) Syntax: /dep_var varname depending_var1 depending_var2 /undep_var varname depending_var /dset varname[=[Wert]] (wie bei /set) Beispiel: /set a=5 /set b=2 /set status_var_b=a+b /set status_fields=b (Statuszeile zeigt 7) /dep_var a b /dset a=2 (Statuszeile zeigt 4) /dset a=10 (Statuszeile zeigt 12) Damit koennen z.b. alle Krankheitsflags auf ein Feld der Statuszeile abgebildet werden: /dep_var p_blind p_arzt /dep_var p_deaf p_arzt /dep_var p_frog p_arzt /def sl_arzt = \ /init_var p_arzt%;\ /set status_func_p_arzt=(p_blind ? "B" : "*")%;\ /set status_attr_p_arzt=strcat(p_frog ? "Cgreen" : "", p_deaf ? "r" : "") bei /dset p_frog=1 wir p_arzt auch aktualisiert und damit die Statuszeile Gruen -------------------------------------------------------------------------- /random_param liefert einen zufaellig ausgewaehlten Parameter zurueck z.b. /def wuerfel = \ /random_param 1 2 3 4 5 6 oder /def random_color = \ /random_param Cbgblack Cbgred Cbggreen Cbgyellow Cbgblue Cbgmagenta Cbgcyan Cbgwhite Cblack Cred Cgreen Cyellow Cblue Cmagenta Ccyan Cwhite B r u -------------------------------------------------------------------------- ich moechte bei der Gelegenheit auch noch einmal auf get_param hinweisen: Falls man einen Space-separierten String hat und auf einen Wert zugreifen will kann man das mit get_param tun /get_param 1 a b c -> a /get_param L a b c -> c /get_param -L a b c -> a b /get_param -1 a b c -> b c /get_param 3 a b c -> c |