Formatierung, Kosmetik

Change-Id: Iabbbfd3d610bcfbc1591ee34eef4072ad9d69ed4
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index a26f9ed..a0e0768 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -20,23 +20,58 @@
 #define NEED_PROTOTYPES
 #include "channel.h"
 
-#define CMNAME  "<MasteR>"
-#define CHANNEL_SAVE    "/p/daemon/save/channeld"
+#define CMNAME       "<MasteR>"
+#define CHANNEL_SAVE "/p/daemon/save/channeld"
+#define MEMORY       "/secure/memory"
+#define TIMEOUT      (time() - 60)
+#define CMDS         ({C_FIND, C_LIST, C_JOIN, C_LEAVE, C_SEND, C_NEW})
 
-#define MEMORY "/secure/memory"
-
-// channels - contains the simple channel information
-//            ([ channelname : ({ I_MEMBER, I_ACCESS, I_INFO, I_MASTER })...])
-private nosave mapping lowerch;
+/* list of channels and their corresponding data (members, etc.)
+   channels = ([string channelname : ({ ({object* members}),
+                                          closure access_rights,
+                                          string channel_info,
+                                          string|object master_object,
+                                          string channelname }) ]) */
 private nosave mapping channels;
+//private nosave mapping lowerch; // unused
+
+/* channel history
+   mapping channelH = ([ string channelname : ({ string channelname,
+                                                 string sender,
+                                                 string msg,
+                                                 int msg_type }) ]) */
 private nosave mapping channelH;
+
+/* list of global channelmaster stats
+   mapping stats:  ([ "time" : int object_time(),
+                      "boot" : string load_name(previous_object()),
+                      "new"  : int total_channels_created,
+                      "disposed" : int total_channels_removed ]) */
 private nosave mapping stats;
 
+/* channel cache
+   mapping channelC = ([ string channelname : ({ string I_NAME,
+                                                 string I_INFO,
+                                                 int time() }) ]) */
 private mapping channelC;
+
+/* list of players' banned commands, if any
+   mapping channelB = ([ string playername : ({ string* banned_commands })])*/
 private mapping channelB;
 
+/* timeout cache for player commands (timeout = 60 s, see above)
+   ensures that the same command is only executed once per minute, max
+   mapping Tcmd = ([ "lag": int timestamp,
+                     "uptime":  int timestamp,
+                     "statistik":  int timestamp]) */
+private mapping Tcmd = ([]);
+
+/* Flag to indicate that data changes have occurred and that we need saving
+   in the next save_object() run.
+   set to 0 or 1 */
 private int save_me_soon;
 
+
 // BEGIN OF THE CHANNEL MASTER ADMINISTRATIVE PART
 
 #define RECV    0
@@ -55,174 +90,221 @@
 int check(string ch, object pl, string cmd)
 {
   int level;
-  
-  if((admin[ch, FLAG] & F_NOGUEST) && pl->QueryGuest()) return 0;
 
-  if((admin[ch, FLAG] & F_WIZARD) && query_wiz_level(pl) < SEER_LVL) return 0;
+  if ((admin[ch, FLAG] & F_NOGUEST) && pl->QueryGuest())
+    return 0;
+
+  if ((admin[ch, FLAG] & F_WIZARD) && query_wiz_level(pl) < SEER_LVL)
+    return 0;
+
   level = (admin[ch, FLAG] & F_WIZARD
-           ? query_wiz_level(pl)
-           : pl->QueryProp(P_LEVEL));
+              ? query_wiz_level(pl)
+              : pl->QueryProp(P_LEVEL));
 
-  switch(cmd)
+  switch (cmd)
   {
-  case C_FIND:
-  case C_LIST:
-  case C_JOIN:
-    if(admin[ch, RECV] == -1) return 0;
-    if(admin[ch, RECV] <= level) return 1;
-    break;
-  case C_SEND:
-    if(admin[ch, SEND] == -1) return 0;
-    if(admin[ch, SEND] <= level) return 1;
-    break;
-  case C_LEAVE:
-    return 1;
-  default: break;
+    case C_FIND:
+    case C_LIST:
+    case C_JOIN:
+      if (admin[ch, RECV] == -1)
+        return 0;
+      if (admin[ch, RECV] <= level)
+        return 1;
+      break;
+
+    case C_SEND:
+      if (admin[ch, SEND] == -1)
+        return 0;
+      if (admin[ch, SEND] <= level)
+        return 1;
+      break;
+
+    case C_LEAVE:
+      return 1;
+
+    default:
+      break;
   }
-  return(0);
+  return (0);
 }
 
 private int CountUser(mapping l)
 {
   mapping n = ([]);
-  walk_mapping(l, function void (string chan_name, mixed* chan_data) {
-        n += mkmapping(chan_data[I_MEMBER]);
-      });
+  walk_mapping(l, function void (string chan_name, mixed * chan_data)
+    {
+      n += mkmapping(chan_data[I_MEMBER]);
+    });
   return sizeof(n);
 }
 
-private void banned(string n, mixed cmds, string res)
+private void banned(string n, string* cmds, string res)
 {
   res += sprintf("%s [%s], ", capitalize(n), implode(cmds, ","));
 }
 
-private mapping Tcmd = ([]);
-#define TIMEOUT (time() - 60)
-
 void ChannelMessage(mixed msg)
 {
   string ret, mesg;
   mixed lag;
   int max, rekord;
   string tmp;
-  if(msg[1] == this_object() || !stringp(msg[2]) ||
-     msg[0] != CMNAME || previous_object() != this_object()) return;
 
+  if (msg[1] == this_object() || !stringp(msg[2]) ||
+      msg[0] != CMNAME || previous_object() != this_object())
+    return;
 
   mesg = lower_case(msg[2]);
 
-  if(!strstr("hilfe", mesg) && sizeof(mesg) <= 5)
-    ret = "Folgende Kommandos gibt es: hilfe, lag, up[time], statistik, bann";
-  else
-  if(!strstr("lag", mesg) && sizeof(mesg) <= 3)
+  if (!strstr("hilfe", mesg) && sizeof(mesg) <= 5)
   {
-    if(Tcmd["lag"] > TIMEOUT) return;
+    ret = "Folgende Kommandos gibt es: hilfe, lag, up[time], statistik, bann";
+  }
+  else if (!strstr("lag", mesg) && sizeof(mesg) <= 3)
+  {
+    // TODO: invert logic to make this better understandable, e.g.
+    // if ( CMD_AVAILABLE("lag") ) and rearrange code block
+    if (Tcmd["lag"] > TIMEOUT)
+      return;
+
     Tcmd["lag"] = time();
     lag = "/p/daemon/lag-o-daemon"->read_ext_lag_data();
     ret = sprintf("Lag: %.1f%%/60, %.1f%%/15, %.1f%%/5, %.1f%%/1, "
-                       "%.1f%%/20s, %.1f%%/2s",
-                  lag[5], lag[4], lag[3], lag[2], lag[1], lag[0]);
-    call_out(#'send/*'*/, 2, CMNAME, this_object(), ret);
+              "%.1f%%/20s, %.1f%%/2s",
+              lag[5], lag[4], lag[3], lag[2], lag[1], lag[0]);
+    call_out(#'send, 2, CMNAME, this_object(), ret);
     ret = query_load_average();
-  } else
-  if(!strstr("uptime", mesg) && sizeof(mesg) <= 6)
+  }
+  // TODO: move this logic to a function with a self-explanatory name
+  else if (!strstr("uptime", mesg) && sizeof(mesg) <= 6)
   {
-    if(Tcmd["uptime"] > TIMEOUT) return;
+    if (Tcmd["uptime"] > TIMEOUT)
+      return;
+
     Tcmd["uptime"] = time();
-    if(file_size("/etc/maxusers") <= 0) {
+
+    if (file_size("/etc/maxusers") <= 0)
+    {
       ret = "Diese Information liegt nicht vor.";
-    } else {
+    }
+    else
+    {
       sscanf(read_file("/etc/maxusers"), "%d %s", max, tmp);
       sscanf(read_file("/etc/maxusers.ever"), "%d %s", rekord, tmp);
       ret = sprintf("Das MUD laeuft jetzt %s. Es sind momentan %d Spieler "
-                  "eingeloggt; das Maximum lag heute bei %d und der Rekord "
-                  "bisher ist %d.", uptime(), sizeof(users()), max, rekord);
+          "eingeloggt; das Maximum lag heute bei %d und der Rekord "
+          "bisher ist %d.", uptime(), sizeof(users()), max, rekord);
     }
-  } else
-  if(!strstr("statistik", mesg) && sizeof(mesg) <= 9)
+  }
+  else if (!strstr("statistik", mesg) && sizeof(mesg) <= 9)
   {
-    if(Tcmd["statistik"] > TIMEOUT) return;
+    if (Tcmd["statistik"] > TIMEOUT)
+      return;
+
     Tcmd["statistik"] = time();
     ret = sprintf(
-    "Im Moment sind insgesamt %d Ebenen mit %d Teilnehmern aktiv.\n"
-    "Der %s wurde das letzte mal am %s von %s neu gestartet.\n"
-    "Seitdem wurden %d Ebenen neu erzeugt und %d zerstoert.\n",
-    sizeof(channels), CountUser(channels), CMNAME,
-    dtime(stats["time"]), stats["boot"], stats["new"], stats["dispose"]);
-  } else
-  if(!strstr(mesg, "bann"))
+        "Im Moment sind insgesamt %d Ebenen mit %d Teilnehmern aktiv.\n"
+        "Der %s wurde das letzte mal am %s von %s neu gestartet.\n"
+        "Seitdem wurden %d Ebenen neu erzeugt und %d zerstoert.\n",
+        sizeof(channels), CountUser(channels), CMNAME,
+        dtime(stats["time"]), stats["boot"], stats["new"], stats["dispose"]);
+  }
+  else if (!strstr(mesg, "bann"))
   {
     string pl, cmd;
-    if(mesg == "bann")
-      if(sizeof(channelB))
+
+    if (mesg == "bann")
+    {
+      if (sizeof(channelB))
       {
         ret = "";
-        walk_mapping(channelB, #'banned/*'*/, &ret);
+        walk_mapping(channelB, #'banned, &ret);
         ret = "Fuer folgende Spieler besteht ein Bann: " + ret;
-      } else ret = "Zur Zeit ist kein Bann aktiv.";
-    else
-    {
-      if(sscanf(mesg, "bann %s %s", pl, cmd) == 2 &&
-         IS_DEPUTY(msg[1]))
-      {
-#     define CMDS ({C_FIND, C_LIST, C_JOIN, C_LEAVE, C_SEND, C_NEW})
-        pl = lower_case(pl); cmd = lower_case(cmd);
-        if(member(CMDS, cmd) != -1)
-        {
-          if(!pointerp(channelB[pl]))
-            channelB[pl] = ({});
-          if(member(channelB[pl], cmd) != -1)
-            channelB[pl] -= ({ cmd });
-          else
-            channelB[pl] += ({ cmd });
-          ret = "Fuer '"+capitalize(pl)+"' besteht "
-            + (sizeof(channelB[pl]) ?
-               "folgender Bann: "+implode(channelB[pl], ", ") :
-               "kein Bann mehr.");
-          if(!sizeof(channelB[pl]))
-            channelB = m_copy_delete(channelB, pl);
-          save_object(CHANNEL_SAVE);
-        }
-        else ret = "Das Kommando '"+cmd+"' ist unbekannt. Erlaubte Kommandos: "
-               + implode(CMDS, ", ");
       }
       else
       {
-        if(!IS_ARCH(msg[1])) return;
-        else ret = "Syntax: bann <name> <kommando>";
+        ret = "Zur Zeit ist kein Bann aktiv.";
+      }
+    }
+    else
+    {
+      if (sscanf(mesg, "bann %s %s", pl, cmd) == 2 && IS_DEPUTY(msg[1]))
+      {
+        pl = lower_case(pl);
+        cmd = lower_case(cmd);
+
+        if (member(CMDS, cmd) != -1)
+        {
+          if (!pointerp(channelB[pl]))
+            channelB[pl] = ({});
+
+          if (member(channelB[pl], cmd) != -1)
+            channelB[pl] -= ({ cmd });
+          else
+            channelB[pl] += ({ cmd });
+          ret = "Fuer '" + capitalize(pl) + "' besteht "
+            + (sizeof(channelB[pl]) ?
+              "folgender Bann: " + implode(channelB[pl], ", ") :
+              "kein Bann mehr.");
+
+          if (!sizeof(channelB[pl]))
+            channelB = m_copy_delete(channelB, pl);
+
+          save_object(CHANNEL_SAVE);
+        }
+        else
+        {
+          ret = "Das Kommando '" + cmd + "' ist unbekannt. "
+                "Erlaubte Kommandos: "+ implode(CMDS, ", ");
+        }
+      }
+      else
+      {
+        if (!IS_ARCH(msg[1]))
+          return;
+        else
+          ret = "Syntax: bann <name> <kommando>";
       }
     }
   }
-  else if(mesg == "lust")
+  else if (mesg == "lust")
   {
     mixed t, up;
-    if(Tcmd["lag"] > TIMEOUT ||
-       Tcmd["statistik"] > TIMEOUT ||
-       Tcmd["uptime"] > TIMEOUT) return;
+
+    if (Tcmd["lag"] > TIMEOUT ||
+        Tcmd["statistik"] > TIMEOUT ||
+        Tcmd["uptime"] > TIMEOUT)
+      return;
+
     Tcmd["lag"] = time();
     Tcmd["statistik"] = time();
     Tcmd["uptime"] = time();
     lag = "/p/daemon/lag-o-daemon"->read_lag_data();
-
     sscanf(read_file("/etc/maxusers"), "%d %s", max, tmp);
     sscanf(read_file("/etc/maxusers.ever"), "%d %s", rekord, tmp);
+    t = time() - last_reboot_time();
+    up = "";
 
-    t=time()-last_reboot_time();
-    up="";
-    if(t >= 86400)
-      up += sprintf("%dT", t/86400);
-    if(t >= 3600)
-      up += sprintf("%dh", (t=t%86400)/3600);
-    if(t > 60)
-      up += sprintf("%dm", (t=t%3600)/60);
-    up += sprintf("%ds", t%60);
+    if (t >= 86400)
+      up += sprintf("%dT", t / 86400);
 
+    if (t >= 3600)
+      up += sprintf("%dh", (t = t % 86400) / 3600);
+
+    if (t > 60)
+      up += sprintf("%dm", (t = t % 3600) / 60);
+
+    up += sprintf("%ds", t % 60);
     ret = sprintf("%.1f%%/15 %.1f%%/1 %s %d:%d:%d E:%d T:%d",
-                  lag[1], lag[2], up, sizeof(users()), max, rekord, 
-                  sizeof(channels), CountUser(channels));
-  } else return;
+            lag[1], lag[2], up, sizeof(users()), max, rekord,
+            sizeof(channels), CountUser(channels));
+  }
+  else
+  {
+    return;
+  }
 
-  call_out(#'send/*'*/, 2, CMNAME, this_object(), ret);
+  call_out(#'send, 2, CMNAME, this_object(), ret);
 }
 
 // setup() -- set up a channel and register it
@@ -240,33 +322,47 @@
   string d;
   d = "- Keine Beschreibung -";
   m = this_object();
-  if(sizeof(c) && sizeof(c[0]) > 1 && c[0][0] == '\\')
+
+  if (sizeof(c) && sizeof(c[0]) > 1 && c[0][0] == '\\')
     c[0] = c[0][1..];
 
-  switch(sizeof(c))
+  switch (sizeof(c))
   {
-  case 6:
-    if(!stringp(c[5]) || !sizeof(c[5]) 
-        || (catch(m=load_object(c[5]);publish) || !objectp(m) ))
-      m = this_object();
-  case 5: d = stringp(c[4]) || closurep(c[4]) ? c[4] : d;
-  case 4: admin[c[0], FLAG] = to_int(c[3]);
-  case 3: admin[c[0], SEND] = to_int(c[2]);
-  case 2: admin[c[0], RECV] = to_int(c[1]);
-    break;
-  case 0:
-  default:
-    return;
+    case 6:
+      if (!stringp(c[5]) || !sizeof(c[5]) ||
+          (catch(m = load_object(c[5]); publish) ||
+          !objectp(m)))
+        m = this_object();
+
+    case 5:
+      d = stringp(c[4]) || closurep(c[4]) ? c[4] : d;
+
+    case 4:
+      admin[c[0], FLAG] = to_int(c[3]);
+
+    case 3:
+      admin[c[0], SEND] = to_int(c[2]);
+
+    case 2:
+      admin[c[0], RECV] = to_int(c[1]);
+      break;
+
+    case 0:
+    default:
+      return;
   }
-  switch(new(c[0], m, d))
+
+  switch (new(c[0], m, d))
   {
-  case E_ACCESS_DENIED:
-    log_file("CHANNEL", sprintf("[%s] %s: %O: error, access denied\n",
-                           dtime(time()), c[0], m));
-    break;
-  default:
-    break;
+    case E_ACCESS_DENIED:
+      log_file("CHANNEL", sprintf("[%s] %s: %O: error, access denied\n",
+        dtime(time()), c[0], m));
+      break;
+
+    default:
+      break;
   }
+
   return;
 }
 
@@ -274,83 +370,103 @@
 {
   mixed tmp;
 #if !defined(__TESTMUD__) && MUDNAME=="MorgenGrauen"
-  tmp = read_file(object_name(this_object())+".init");
+  tmp = read_file(object_name(this_object()) + ".init");
 #else
-  tmp = read_file(object_name(this_object())+".init.testmud");
+  tmp = read_file(object_name(this_object()) + ".init.testmud");
 #endif
+
   if (!stringp(tmp))
     return;
+
   tmp = regexp(old_explode(tmp, "\n"), "^[^#]");
-  tmp = map(tmp, #'regexplode/*'*/, "[^:][^:]*$|[ \\t]*:[ \\t]*");
-  tmp = map(tmp, #'regexp/*'*/, "^[^: \\t]");
-  map(tmp, #'setup/*'*/);
+  tmp = map(tmp, #'regexplode, "[^:][^:]*$|[ \\t]*:[ \\t]*");
+  tmp = map(tmp, #'regexp, "^[^: \\t]");
+  map(tmp, #'setup);
 }
 
-// BEGIN OF THE CHANNEL MASTER IMPLEMENTATION
+        // BEGIN OF THE CHANNEL MASTER IMPLEMENTATION
 
 protected void create()
 {
   seteuid(getuid());
   restore_object(CHANNEL_SAVE);
-  if(!channelC) channelC = ([]);
-  if(!channelB) channelB = ([]);
+
+  if (!channelC)
+    channelC = ([]);
+
+  if (!channelB)
+    channelB = ([]);
+
   channels = ([]);
 
-  /* Die Channel-History wird nicht nur lokal sondern auch noch im Memory 
-     gespeichert, dadurch bleibt sie auch ueber ein Reload erhalten. 
+  /* Die Channel-History wird nicht nur lokal sondern auch noch im Memory
+     gespeichert, dadurch bleibt sie auch ueber ein Reload erhalten.
      Der folgende Code versucht, den Zeiger aus dem Memory zu holen. Falls
      das nicht moeglich ist, wird ein neuer erzeugt und gegebenenfalls im
      Memory abgelegt. */
 
   // Hab ich die noetigen Rechte im Memory?
-  if (call_other(MEMORY,"HaveRights")) {
+  if (call_other(MEMORY, "HaveRights"))
+  {
     // Objektpointer laden
-    channelH = call_other(MEMORY,"Load","History");
+    channelH = (mixed) call_other(MEMORY, "Load", "History");
 
     // Wenns nich geklappt hat, hat der Memory noch keinen Zeiger, dann
-    if (!mappingp(channelH)){
+    if (!mappingp(channelH)) {
       // Zeiger erzeugen
       channelH = ([]);
       // und in den Memory schreiben
-      call_other(MEMORY,"Save","History",channelH);
+      call_other(MEMORY, "Save", "History", channelH);
     }
-  } else {
+  }
+  else
+  {
     // Keine Rechte im Memory, dann wird mit einem lokalen Zeiger gearbeitet.
     channelH = ([]);
   }
 
   stats = (["time": time(),
-            "boot": capitalize(getuid(previous_object())||"<Unbekannt>")]);
-  new(CMNAME, this_object(), "Zentrale Informationen zu den Ebenen");
+                "boot": capitalize(getuid(previous_object()) || "<Unbekannt>")]);
+  new (CMNAME, this_object(), "Zentrale Informationen zu den Ebenen");
   initialize();
   map_objects(efun::users(), "RegisterChannels");
   this_object()->send(CMNAME, this_object(),
-                      sprintf("%d Ebenen mit %d Teilnehmern initialisiert.",
-                              sizeof(channels),
-                              CountUser(channels)));
+    sprintf("%d Ebenen mit %d Teilnehmern initialisiert.",
+      sizeof(channels),
+      CountUser(channels)));
 }
 
 // reset() and cache_to() - Cache Timeout, remove timed out cached channels
 // SEE: new, send
 private int cache_to(string key, mapping m, int t)
 {
-  if(!pointerp(m[key]) || m[key][2] + 43200 > t) return 1;
-  return(0);
+  if (!pointerp(m[key]) || m[key][2] + 43200 > t)
+    return 1;
+
+  return (0);
 }
 
 varargs void reset(int nonstd)
 {
-  channelC = filter_indices(channelC, #'cache_to/*'*/, channelC, time());
+  channelC = filter_indices(channelC, #'cache_to, channelC, time());
+
   if (save_me_soon)
   {
-    save_me_soon=0;
+    save_me_soon = 0;
     save_object(CHANNEL_SAVE);
   }
 }
 
 // name() - define the name of this object.
-string name() { return CMNAME; }
-string Name() { return CMNAME; }
+string name()
+{
+  return CMNAME;
+}
+
+string Name()
+{
+  return CMNAME;
+}
 
 // access() - check access by looking for the right argument types and
 //            calling access closures respectively
@@ -361,45 +477,53 @@
 {
   mixed co, m;
 
-  if(!stringp(ch) || !sizeof(ch = lower_case(ch)) || !channels[ch])
+  if (!stringp(ch) || !sizeof(ch = lower_case(ch)) || !channels[ch])
     return 0;
-  if(!channels[ch][I_ACCESS]||!previous_object(1)||!extern_call()||
-     previous_object(1)==this_object()||
-     (stringp(channels[ch][I_MASTER])&&
-      previous_object(1)==find_object(channels[ch][I_MASTER]))||
-     getuid(previous_object(1)) == ROOTID)
+
+  if (!channels[ch][I_ACCESS] || !previous_object(1) || !extern_call() ||
+      previous_object(1) == this_object() ||
+      (stringp(channels[ch][I_MASTER]) &&
+      previous_object(1) == find_object(channels[ch][I_MASTER])) ||
+      getuid(previous_object(1)) == ROOTID)
     return 2;
-  if(!objectp(pl) || 
-     ((previous_object(1)!=pl) &&(previous_object(1)!=this_object()))) 
-     return 0;
-   if(pointerp(channelB[getuid(pl)]) &&
-     member(channelB[getuid(pl)], cmd) != -1)
+
+  if (!objectp(pl) ||
+      ((previous_object(1) != pl) && (previous_object(1) != this_object())))
     return 0;
-   if(stringp(channels[ch][I_MASTER]) &&
-     (!(m = find_object(channels[ch][I_MASTER])) ||
-      (!to_object(channels[ch][I_ACCESS]) ||
-       get_type_info(channels[ch][I_ACCESS])[1])))
+
+  if (pointerp(channelB[getuid(pl)]) &&
+      member(channelB[getuid(pl)], cmd) != -1)
+    return 0;
+
+  if (stringp(channels[ch][I_MASTER]) &&
+      (!(m = find_object(channels[ch][I_MASTER])) ||
+        (!to_object(channels[ch][I_ACCESS]) ||
+        get_type_info(channels[ch][I_ACCESS])[1])))
   {
     string err;
-    if(!objectp(m)) err = catch(load_object(channels[ch][I_MASTER]);publish);
-    if(!err &&
-       ((!to_object(channels[ch][I_ACCESS]) ||
-         get_type_info(channels[ch][I_ACCESS])[1]) &&
-        !closurep(channels[ch][I_ACCESS] =
-                  symbol_function("check",
-                                  find_object(channels[ch][I_MASTER])))))
+
+    if (!objectp(m))
+      err = catch(load_object(channels[ch][I_MASTER]); publish);
+
+    if (!err &&
+        ((!to_object(channels[ch][I_ACCESS]) ||
+           get_type_info(channels[ch][I_ACCESS])[1]) &&
+          !closurep(channels[ch][I_ACCESS] =
+          symbol_function("check", find_object(channels[ch][I_MASTER])))))
     {
       log_file("CHANNEL", sprintf("[%s] %O -> %O\n",
-                                  dtime(time()), channels[ch][I_MASTER],
-                                  err));
+                dtime(time()), channels[ch][I_MASTER],
+                err));
       channels = m_copy_delete(channels, ch);
       return 0;
     }
+
     this_object()->join(ch, find_object(channels[ch][I_MASTER]));
   }
-  if(closurep(channels[ch][I_ACCESS]))
-      return funcall(channels[ch][I_ACCESS],
-                     channels[ch][I_NAME], pl, cmd, &txt);
+
+  if (closurep(channels[ch][I_ACCESS]))
+    return funcall(channels[ch][I_ACCESS],
+              channels[ch][I_NAME], pl, cmd, &txt);
 }
 
 // new() - create a new channel
@@ -408,57 +532,61 @@
 //         to display up-to-date information, check may contain a closure
 //         called when a join/leave/send/list/users message is received
 // SEE: access
-
 #define IGNORE  "^/xx"
 
 varargs int new(string ch, object pl, mixed info)
 {
   mixed pls;
 
-  if(!objectp(pl) || !stringp(ch) || !sizeof(ch) || channels[lower_case(ch)] ||
-     (pl == this_object() && extern_call()) ||
-     sizeof(channels) >= MAX_CHANNELS ||
-     sizeof(regexp(({ object_name(pl) }), IGNORE)) ||
-     (pointerp(channelB[getuid(pl)]) &&
+  if (!objectp(pl) || !stringp(ch) || !sizeof(ch) ||
+      channels[lower_case(ch)] || (pl == this_object() && extern_call()) ||
+      sizeof(channels) >= MAX_CHANNELS ||
+      sizeof(regexp(({ object_name(pl) }), IGNORE)) ||
+      (pointerp(channelB[getuid(pl)]) &&
       member(channelB[getuid(pl)], C_NEW) != -1))
     return E_ACCESS_DENIED;
 
-  if(!info) {
-    if(channelC[lower_case(ch)]) {
+  if (!info)
+  {
+    if (channelC[lower_case(ch)])
+    {
       ch = channelC[lower_case(ch)][0];
       info = channelC[lower_case(ch)][1];
     }
-    else return E_ACCESS_DENIED;
+    else
+    {
+      return E_ACCESS_DENIED;
+    }
   }
-  else channelC[lower_case(ch)] = ({ ch, info, time() });
+  else
+  {
+    channelC[lower_case(ch)] = ({ ch, info, time() });
+  }
 
   pls = ({ pl });
-
-  channels[lower_case(ch)] = ({ pls,
-                                symbol_function("check", pl) ||
-                                #'check/*'*/, info,
-                                (!living(pl) &&
-                                 !clonep(pl) &&
-                                 pl != this_object()
-                                 ? object_name(pl)
-                                 : pl),
-                                 ch,
-                             });
+  channels[lower_case(ch)] = ({
+                  pls,
+                  symbol_function("check", pl) || #'check, info,
+                  (!living(pl) && !clonep(pl) && pl != this_object()
+                      ? object_name(pl)
+                      : pl),
+                  ch});
 
   // ChannelH fuer einen Kanal nur dann initialisieren, wenn es sie noch nich gibt.
-  if ( !pointerp(channelH[lower_case(ch)]) )
-         channelH[lower_case(ch)] = ({});
+  if (!pointerp(channelH[lower_case(ch)]))
+    channelH[lower_case(ch)] = ({});
 
-  if(pl != this_object())
+  if (pl != this_object())
     log_file("CHANNEL.new", sprintf("[%s] %O: %O %O\n",
-                                    dtime(time()), ch, pl, info));
-  if(!pl->QueryProp(P_INVIS))
+        dtime(time()), ch, pl, info));
+
+  if (!pl->QueryProp(P_INVIS))
     this_object()->send(CMNAME, pl,
-                        "laesst die Ebene '"+ch+"' entstehen.", MSG_EMOTE);
+      "laesst die Ebene '" + ch + "' entstehen.", MSG_EMOTE);
+
   stats["new"]++;
- 
-  save_me_soon=1;
-  return(0);
+  save_me_soon = 1;
+  return (0);
 }
 
 // join() - join a channel
@@ -468,10 +596,14 @@
 // SEE: leave, access
 int join(string ch, object pl)
 {
-  if(!funcall(#'access,&ch, pl, C_JOIN)) return E_ACCESS_DENIED;
-  if(member(channels[ch][I_MEMBER], pl) != -1) return E_ALREADY_JOINED;
+  if (!funcall(#'access,&ch, pl, C_JOIN))
+    return E_ACCESS_DENIED;
+
+  if (member(channels[ch][I_MEMBER], pl) != -1)
+    return E_ALREADY_JOINED;
+
   channels[ch][I_MEMBER] += ({ pl });
-  return(0);
+  return (0);
 }
 
 // leave() - leave a channel
@@ -483,43 +615,46 @@
 int leave(string ch, object pl)
 {
   int pos;
-  if(!funcall(#'access,&ch, pl, C_LEAVE)) return E_ACCESS_DENIED;
+
+  if (!funcall(#'access,&ch, pl, C_LEAVE))
+    return E_ACCESS_DENIED;
+
   channels[ch][I_MEMBER] -= ({0}); // kaputte Objekte erstmal raus
-  if((pos = member(channels[ch][I_MEMBER], pl)) == -1) return E_NOT_MEMBER;
-  if(pl == channels[ch][I_MASTER] && sizeof(channels[ch][I_MEMBER]) > 1)
+
+  if ((pos = member(channels[ch][I_MEMBER], pl)) == -1)
+    return E_NOT_MEMBER;
+
+  if (pl == channels[ch][I_MASTER] && sizeof(channels[ch][I_MEMBER]) > 1)
   {
     channels[ch][I_MASTER] = channels[ch][I_MEMBER][1];
-    if(!pl->QueryProp(P_INVIS))
-      this_object()->send(ch, pl, "uebergibt die Ebene an "
-                          +channels[ch][I_MASTER]->name(WEN)+".", MSG_EMOTE);
+
+    if (!pl->QueryProp(P_INVIS))
+      this_object()->send(ch, pl, "uebergibt die Ebene an " +
+        channels[ch][I_MASTER]->name(WEN) + ".", MSG_EMOTE);
   }
   channels[ch][I_MEMBER][pos..pos] = ({ });
 
-
-  if(!sizeof(channels[ch][I_MEMBER]) &&
-     !stringp(channels[ch][I_MASTER]))
+  if (!sizeof(channels[ch][I_MEMBER]) && !stringp(channels[ch][I_MASTER]))
   {
     // delete the channel that has no members
-    if(!pl->QueryProp(P_INVIS))
-      this_object()->send(CMNAME, pl,
-                          "verlaesst als "
-                          +(pl->QueryProp(P_GENDER) == 1 ? "Letzter" :
-                            "Letzte")
-                          +" die Ebene '"
-                          +channels[ch][I_NAME]
-                          +"', worauf diese sich in einem Blitz oktarinen "
-                          +"Lichts aufloest.", MSG_EMOTE);
-    channelC[lower_case(ch)] = ({ channels[ch][I_NAME],
-                                  channels[ch][I_INFO], time() });
+    if (!pl->QueryProp(P_INVIS))
+        this_object()->send(CMNAME, pl,
+          "verlaesst als "+
+          (pl->QueryProp(P_GENDER) == 1 ? "Letzter" : "Letzte")+
+          " die Ebene '"+channels[ch][I_NAME]+"', worauf diese sich in "
+          "einem Blitz oktarinen Lichts aufloest.", MSG_EMOTE);
+
+    channelC[lower_case(ch)] =
+      ({ channels[ch][I_NAME], channels[ch][I_INFO], time() });
     m_delete(channels, lower_case(ch));
-
     // Wird ein Channel entfernt, wird auch seine History geloescht
+    // TODO: this foils the attempts at creating a persistent channel
+    // history via /secure/memory.c
     channelH = m_copy_delete(channelH, lower_case(ch));
-
     stats["dispose"]++;
-    save_me_soon=1;
+    save_me_soon = 1;
   }
-  return(0);
+  return (0);
 }
 
 // send() - send a message to all recipients of the specified channel 'ch'
@@ -532,35 +667,49 @@
 {
   int a;
 
-  if(!(a = funcall(#'access,&ch, pl, C_SEND, &msg))) return E_ACCESS_DENIED;
-  if(a < 2 && member(channels[ch][I_MEMBER], pl) == -1) return E_NOT_MEMBER;
-  if(!msg || !stringp(msg) || !sizeof(msg)) return E_EMPTY_MESSAGE;
-  map_objects(channels[ch][I_MEMBER],
-              "ChannelMessage", ({ channels[ch][I_NAME], pl, msg, type }));
-  if(sizeof(channelH[ch]) > MAX_HIST_SIZE)
+  if (!(a = funcall(#'access, &ch, pl, C_SEND, &msg)))
+    return E_ACCESS_DENIED;
+
+  if (a < 2 && member(channels[ch][I_MEMBER], pl) == -1)
+    return E_NOT_MEMBER;
+
+  if (!msg || !stringp(msg) || !sizeof(msg))
+    return E_EMPTY_MESSAGE;
+
+  map_objects(channels[ch][I_MEMBER], "ChannelMessage",
+                ({ channels[ch][I_NAME], pl, msg, type }));
+
+  if (sizeof(channelH[ch]) > MAX_HIST_SIZE)
     channelH[ch] = channelH[ch][1..];
-  channelH[ch] += ({ ({ channels[ch][I_NAME],
-                        (stringp(pl)
-                         ? pl
-                         : (pl->QueryProp(P_INVIS)
-                            ? "/("+capitalize(getuid(pl))+")$" : "")
-                         + (pl->Name(WER, 2) || "<Unbekannt>")),
-                         msg+" <"+strftime("%a, %H:%M:%S")+">\n",
-                         type }) });
-  return(0);
+
+  channelH[ch] +=
+    ({ ({ channels[ch][I_NAME],
+          (stringp(pl)
+              ? pl
+              : (pl->QueryProp(P_INVIS)
+                    ? "/(" + capitalize(getuid(pl)) + ")$"
+                    : "")
+                  + (pl->Name(WER, 2) || "<Unbekannt>")),
+          msg + " <" + strftime("%a, %H:%M:%S") + ">\n",
+          type }) });
+      return (0);
+    }
+
+private void clean(string n, mixed a)
+{
+  a[0] -= ({ 0 });
 }
 
 // list() - list all channels, that are at least receivable by 'pl'
 //          returns a mapping,
 // SEE: access, channels
-private void clean(string n, mixed a) { a[0] -= ({ 0 }); }
 mixed list(object pl)
 {
-  mapping chs;
-  
-  chs = filter_indices(channels, #'access/*'*/, pl, C_LIST);
-  walk_mapping(chs, #'clean/*'*/);
-  if(!sizeof(chs)) return E_ACCESS_DENIED;
+  mapping chs = filter_indices(channels, #'access, pl, C_LIST);
+  walk_mapping(chs, #'clean);
+
+  if (!sizeof(chs))
+    return E_ACCESS_DENIED;
   return deep_copy(chs);
 }
 
@@ -570,22 +719,34 @@
 mixed find(string ch, object pl)
 {
   mixed chs, s;
-  if(stringp(ch)) ch = lower_case(ch);
-  if( !sizeof(regexp(({ch}),"^[<>a-z0-9#-]*$")) ) return 0; // RUM
-  if(!sizeof(chs = regexp(m_indices(channels), "^"+ch+"$")))
-    chs = regexp(m_indices(channels), "^"+ch);
-  if((s = sizeof(chs)) > 1)
-    if(sizeof(chs = filter(chs, #'access/*'*/, pl, C_FIND)) == 1)
+
+  if (stringp(ch))
+    ch = lower_case(ch);
+
+  if (!sizeof(regexp(({ch}), "^[<>a-z0-9#-]*$")))
+    return 0; // RUM
+
+  if (!sizeof(chs = regexp(m_indices(channels), "^" + ch + "$")))
+    chs = regexp(m_indices(channels), "^" + ch);
+
+  if ((s = sizeof(chs)) > 1)
+  {
+    if (sizeof(chs = filter(chs, #'access, pl, C_FIND)) == 1)
       return channels[chs[0]][I_NAME];
-    else return chs;
-  return ((s && funcall(#'access,chs[0], pl, C_FIND)) ? channels[chs[0]][I_NAME] : 0);
+    else
+      return chs;
+  }
+
+  return ((s && funcall(#'access,chs[0], pl, C_FIND))
+            ? channels[chs[0]][I_NAME]
+            : 0);
 }
 
 // history() - get the history of a channel
 // SEE: access
 mixed history(string ch, object pl)
 {
-  if(!funcall(#'access,&ch, pl, C_JOIN))
+  if (!funcall(#'access, &ch, pl, C_JOIN))
     return E_ACCESS_DENIED;
   return deep_copy(channelH[ch]);
 }
@@ -596,53 +757,60 @@
 {
   mixed members;
 
-  if(previous_object() != this_object())
-    if(!stringp(ch) ||
-       pl != this_player() || this_player() != this_interactive() ||
-       this_interactive() != previous_object() ||
-       !IS_ARCH(this_interactive()))
+  if (previous_object() != this_object())
+  {
+    if (!stringp(ch) ||
+        pl != this_player() || this_player() != this_interactive() ||
+        this_interactive() != previous_object() ||
+        !IS_ARCH(this_interactive()))
       return E_ACCESS_DENIED;
+  }
 
-  if(channels[lower_case(ch)]) {
+  if (channels[lower_case(ch)])
+  {
     channels[lower_case(ch)][I_MEMBER] =
-        filter_objects(channels[lower_case(ch)][I_MEMBER],
-                       "QueryProp", P_CHANNELS);
+      filter_objects(channels[lower_case(ch)][I_MEMBER],
+      "QueryProp", P_CHANNELS);
     map(channels[lower_case(ch)][I_MEMBER],
-          function mixed (object listener) {
-            string* chans = listener->QueryProp(P_CHANNELS);
-            chans -= ({lower_case(ch)});
-            ({string*})listener->SetProp(P_CHANNELS, chans);
-          });
+    function mixed(object listener)
+      {
+        string* chans = listener->QueryProp(P_CHANNELS);
+        chans -= ({lower_case(ch)});
+        ({string*})listener->SetProp(P_CHANNELS, chans);
+      });
     channels = m_copy_delete(channels, lower_case(ch));
 
     // Wird ein Channel entfernt, wird auch seine History geloescht
-    if( pointerp(channelH[lower_case(ch)] ))
-     channelH = m_copy_delete(channelH, lower_case(ch));
+    if (pointerp(channelH[lower_case(ch)]))
+      channelH = m_copy_delete(channelH, lower_case(ch));
 
     stats["dispose"]++;
   }
-  if(!channelC[lower_case(ch)])
+
+  if (!channelC[lower_case(ch)])
     return E_ACCESS_DENIED;
+
   channelC = m_copy_delete(channelC, lower_case(ch));
-  save_me_soon=1;
-  return(0);
+  save_me_soon = 1;
+  return (0);
 }
 
-// Wird aus der Shell aufgerufen 
+// Wird aus der Shell aufgerufen
 mixed clear_history(string ch)
 {
-  mixed members;
   // Sicherheitsabfragen
-  if(previous_object() != this_object())
-    if(!stringp(ch) ||
-       this_player() != this_interactive() ||
-       this_interactive() != previous_object() ||
-       !IS_ARCH(this_interactive()))
+  if (previous_object() != this_object())
+  {
+    if (!stringp(ch) ||
+        this_player() != this_interactive() ||
+        this_interactive() != previous_object() ||
+        !IS_ARCH(this_interactive()))
       return E_ACCESS_DENIED;
+  }
 
   // History des Channels loeschen
-  if( pointerp(channelH[lower_case(ch)] ))
-    channelH[lower_case(ch)]=({});
+  if (pointerp(channelH[lower_case(ch)]))
+    channelH[lower_case(ch)] = ({});
 
   return 0;
 }