Neue Wrapper fuer ReceiveMsg(): ReceiveWave()

ReceiveWave() fasst die Argumente msg, msg_type, msg_action und
msg_prefix von ReceiveMsg() in eine Datenstruktur wave_s zusammen.

Change-Id: Ia285e9b8081ecd3db9b6d8842044b826861e12ef
diff --git a/std/living/comm.c b/std/living/comm.c
index 61c5b70..812ea6f 100644
--- a/std/living/comm.c
+++ b/std/living/comm.c
@@ -138,8 +138,42 @@
   return MT_LOOK;
 }
 
+// ReceiveMsg() wird in <player/comm.c> und <npc/comm.c> implementiert und ist
+// hier nicht erforderlich (Cross-Defintion von LPC sei Dank).
+//public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
+//                              string msg_prefix, object origin)
+//{}
+
+
 // Wrapper fuer ReceiveMsg()
 
+// Bekommt ein wave_s oder davon geerbte Struct uebergeben, welche daher
+// mindestens Nachricht, Typ und Prefix enthaelt. Ist ansonsten
+// funktionsgleich zu ReceiveMsg().
+public int ReceiveWave(struct wave_s wave, string msg_action, object origin)
+{
+  if (!wave) return MSG_FAILED;
+  return ReceiveMsg(wave.msg, wave.type, msg_action, wave.prefix,
+                    origin);
+}
+
+// Bekommt ein wave_s oder davon geerbte Struct uebergeben, welche daher
+// mindestens Nachricht, Typ und Prefix enthaelt. Wird ein wave_dyn_s
+// uebergeben und ist das <cl>-Element eine Closure, wird diese ausgewertet
+// und kann Nachricht, Typ und Prefix veraendern. Ansonsten ist diese Funktion
+// funktionsgleich zu ReceiveWave().
+public int ReceiveDynWave(struct wave_s wave, string msg_action, object origin)
+{
+  if (!wave) return MSG_FAILED;
+  // Falls ein wave_dyn_s uebergeben wurde, ist ein Element cl enthalten und
+  // -> gibt das zurueck. ( . funktioniert nicht, weil der Compiler von einem
+  // wave_s ausgeht.
+  if (closurep(wave->cl))
+      wave = funcall(wave->cl, wave);
+  return ReceiveMsg(wave.msg, wave.type, msg_action, wave.prefix,
+                    origin);
+}
+
 public int ReceiveNotify(string msg, string action)
 {
   // Da MT_NOTIFICATION immer zugestellt wird, ist keine Fehlerbehandlung