Ueberarbeitung, Formatierung

Change-Id: Ide037d5e642c5db2aa78c0c45564978b7d4f2880
diff --git a/std/player/channel.c b/std/player/channel.c
index 6784d50..0078ce9 100644
--- a/std/player/channel.c
+++ b/std/player/channel.c
@@ -77,53 +77,59 @@
 
 string* RegisterChannels()
 {
-  string* err;
-  
-  if(extern_call() &&
-     previous_object() != find_object(CHMASTER))
+  if (extern_call() &&
+      previous_object() != find_object(CHMASTER))
     return 0;
 
   c_status = 0;
   shortcut = QueryProp(P_CHANNEL_SHORT);
-  SetProp(P_CHANNELS, map(QueryProp(P_CHANNELS) || ({}),
-    #'lower_case));
-  err = filter(QueryProp(P_CHANNELS),
-         symbol_function("join", CHMASTER),
-         this_object());
-  if(QueryProp(P_LEVEL) < 5) return err;
-  while(sizeof(err)) {
-    CHMASTER->new(err[0], this_object());
-    err[0..0] = ({});
+  SetProp(P_CHANNELS, map(QueryProp(P_CHANNELS) || ({}), #'lower_case));
+
+  closure cl = symbol_function("join", CHMASTER);
+  string* err;
+  if (closurep(cl))
+  {
+    err = filter(QueryProp(P_CHANNELS), cl, this_object());
   }
-  return err;
+  if (QueryProp(P_LEVEL) < 5)
+    return err;
+
+  // CHMASTER->new() gibt bei Erfolg 0 zurueck, d.h. es bleiben
+  // alle Elemente erhalten, deren Channel nicht erstellt werden konnten.
+  // Die werden an die Aufrufer zurueckgegeben.
+  return filter(err, CHMASTER, "new", this_object());
 }
 
 string* RemoveChannels()
 {
-  closure cl;
-  string* err=({});
-  
-  if(extern_call() &&
-     previous_object() != find_object(CHMASTER))
+  if (extern_call() &&
+      previous_object() != find_object(CHMASTER))
     return 0;
 
-  if(!c_status) c_status = 1;
-  else return ({});
-  cl=symbol_function("leave", CHMASTER);
-  if (closurep(cl)) {
-      err = filter(QueryProp(P_CHANNELS), cl, this_object());
-      SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - err);
+  string* err = ({});
+
+  if (!c_status)
+    c_status = 1;
+  else
+    return err;
+
+  closure cl = symbol_function("leave", CHMASTER);
+  if (closurep(cl))
+  {
+    err = filter(QueryProp(P_CHANNELS), cl, this_object());
+    SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - err);
   }
   return err;
 }
 
 varargs private string getName(string|object|closure x, int fall) {
   string|object o = closurep(x) ? query_closure_object(x) : x;
-  if(stringp(o) && sizeof(o) && (x = find_object(o)))
+  if (stringp(o) && sizeof(o) && (x = find_object(o)))
     o = x;
-  
+
   // Objekte
-  if (objectp(o)) {
+  if (objectp(o))
+  {
     // Magier sehen unsichtbare nicht nur als "Jemand"
     if (o->QueryProp(P_INVIS) && IS_LEARNING(this_object()))
       return "("+capitalize(getuid(o))+")";
@@ -134,20 +140,22 @@
     return o->Name(fall, 2)||"<Unbekannt>";
   }
   // Strings
-  else if (stringp(o) && sizeof(o)) {
-    if (o[0] == '/') {
+  else if (stringp(o) && sizeof(o))
+  {
+    if (o[0] == '/')
+    {
       // unsichtbare Objekte...
       int p = strstr(o, "$");
-      if (p != -1) {
-    // Magier im Magiermodus kriegen den Realnamen, andere nicht.
-    if (IS_LEARNING(this_object()))
-      return o[1..p-1];
-    else
-      return o[p+1..];
+      if (p != -1)
+      {
+        // Magier im Magiermodus kriegen den Realnamen, andere nicht.
+        if (IS_LEARNING(this_object()))
+          return o[1..p-1];
+        else
+          return o[p+1..];
       }
-      else
-    // doch nicht unsichtbar
-    return (fall == WESSEN ? o+"s" : o);
+      else // doch nicht unsichtbar
+        return (fall == WESSEN ? o+"s" : o);
     }
     else
       // nicht unsichtbar
@@ -158,11 +166,11 @@
 }
 
 // <nonint> unterdrueckt die Ausgabe an den Spieler und liefert den Text
-// zurueck. Wird nur fuer die Ebenenhistory benutzt. 
+// zurueck. Wird nur fuer die Ebenenhistory benutzt.
 string ChannelMessage(<string|object|int>* msg, int nonint)
 {
   string channel_message;
-  string channel=msg[0];
+  string channel = msg[0];
 
   // Wenn eine Ebenenmeldung ausgegeben werden soll, ist msg[1] ein Objekt,
   // im Fall der History aber ein String. Daher wird <sender> als Union
@@ -171,34 +179,38 @@
   // durchgereicht (Ebenenmeldung). Ein String wird direkt in die Meldung
   // (History) eingebaut, diese an den ChannelParser() zurueckgegeben, der
   // sie via More() ausgibt.
-  string|object sender=msg[1];
-  string message=msg[2];
+  string|object sender = msg[1];
+  string message = msg[2];
   int msg_type = msg[3];
 
-  if ( previous_object() != find_object(CHMASTER) &&
-       previous_object() != ME )
-      return 0;
+  if (previous_object() != find_object(CHMASTER) &&
+      previous_object() != ME )
+    return 0;
 
   string sender_name = getName(sender, msg_type == MSG_GEMOTE ? WESSEN : WER);
-  int prepend_indent_flag=QueryProp(P_MESSAGE_PREPEND) ? BS_PREPEND_INDENT : 0;
-  switch(msg_type) {
-  case MSG_EMPTY:
-    channel_message= message+"\n";
-    break;
-  case MSG_GEMOTE:
-  case MSG_EMOTE:
-    channel_message = break_string(sender_name + " "+ message+"]",
-                   78, sprintf("[%s:", channel),
-                   BS_INDENT_ONCE|prepend_indent_flag);
-    break;
-  case MSG_SAY:
-  default:
-    string presay=sprintf("[%s:%s] ", channel, sender_name);
-    channel_message = break_string(message, max(78,sizeof(presay)+10),
-                   presay, prepend_indent_flag);
-    break;
+  int prepend_indent_flag =
+        QueryProp(P_MESSAGE_PREPEND) ? BS_PREPEND_INDENT : 0;
+
+  switch (msg_type)
+  {
+    case MSG_EMPTY:
+      channel_message= message+"\n";
+      break;
+    case MSG_GEMOTE:
+    case MSG_EMOTE:
+      channel_message = break_string(sender_name + " "+ message+"]", 78,
+                          sprintf("[%s:", channel),
+                          BS_INDENT_ONCE|prepend_indent_flag);
+      break;
+    case MSG_SAY:
+    default:
+      string presay=sprintf("[%s:%s] ", channel, sender_name);
+      channel_message = break_string(message, max(78,sizeof(presay)+10),
+                          presay, prepend_indent_flag);
+      break;
   }
-  if(nonint)
+
+  if (nonint)
     return channel_message;
 
   // Wenn GMCP sich um Uebertragung der Nachricht kuemmert, wird ReceiveMsg()
@@ -211,7 +223,7 @@
     // Der Ebenenname muss in Kleinbuchstaben uebergeben werden, damit die
     // Ignorierepruefung funktioniert. Die ignorierestrings sind naemlich alle
     // kleingeschrieben.
-    ReceiveMsg(channel_message, 
+    ReceiveMsg(channel_message,
                MT_COMM|MT_FAR|MSG_DONT_STORE|MSG_DONT_WRAP,
                MA_CHANNEL"." + lower_case(channel), 0, sender);
   }
@@ -222,36 +234,37 @@
 {
   int pos = member(map(m_values(shortcut), #'lower_case/*'*/), n);
   string sh = "";
-  if(pos != -1)
+  if (pos != -1)
     sh = m_indices(shortcut)[pos];
 
   string* mem=map(a[I_MEMBER],#'getName/*'*/, WER);
-  mem-=({"<MasteR>"});
+  mem -= ({"<MasteR>"});
   l += ({ sprintf("%-12.12'.'s %c[%-1.1s] %|12.12' 's (%-|3' 'd) %-42.42s\n",
-                  a[I_NAME], (member(m, n) != -1 ? '*' : ' '), sh,
-                  a[I_MASTER] ?
-                  getName(a[I_MASTER]) : getName(a[I_ACCESS]),
-                  sizeof(mem),
-            (closurep(a[I_INFO]) && objectp(query_closure_object(a[I_INFO]))) ?
-                  funcall(a[I_INFO]) || "- Keine Beschreibung -" :
-                  (stringp(a[I_INFO]) ? a[I_INFO] : "- Keine Beschreibung -")
-        ) });
+          a[I_NAME], (member(m, n) != -1 ? '*' : ' '), sh,
+          a[I_MASTER] ?
+          getName(a[I_MASTER]) : getName(a[I_ACCESS]),
+          sizeof(mem),
+          (closurep(a[I_INFO]) && objectp(query_closure_object(a[I_INFO]))) ?
+              funcall(a[I_INFO]) || "- Keine Beschreibung -" :
+              (stringp(a[I_INFO]) ? a[I_INFO] : "- Keine Beschreibung -")
+          ) });
 }
 
 private mixed getChannel(string ch)
 {
-  if(!sizeof(ch))
+  if (!sizeof(ch))
     ch = QueryProp(P_STD_CHANNEL);
-  if(shortcut && shortcut[ch])
+  if (shortcut && shortcut[ch])
     ch = shortcut[ch];
   return CHMASTER->find(ch, this_object());
 }
 
 #ifndef DEBUG
-#define DEBUG(x)        if (funcall(symbol_function('find_player),"zesstra"))\
+#define DEBUG(x) if (funcall(symbol_function('find_player),"zesstra"))\
           tell_object(funcall(symbol_function('find_player),"zesstra"),\
                   "MDBG: "+x+"\n")
 #endif
+
 int ChannelParser(string args)
 {
   mixed ch;
@@ -262,188 +275,212 @@
   notify_fail("Benutzung: -<Ebene>[ ]['|:|;]<Text>\n"
               "           -<Ebene>[+|-|?|!|*]\n"
               "           -?\n");
-  if(!cmd && !args) return 0;
-  if(!args) args = "";
+  if (!cmd && !args)
+    return 0;
+
+  if (!args)
+    args = "";
+
   cmd = cmd[1..];
-  if(sizeof(cmd = regexplode(cmd,
-                             "^" CHANNELCMDS "*"
-                             "([+-]|\\!|\\?|\\*)*")) > 1)
+  cmd = regexplode(cmd, "^" CHANNELCMDS "*" "([+-]|\\!|\\?|\\*)*")
+  if (sizeof(cmd) > 1)
   {
     //z.B. cmd= ({"","allgemein",":testet"})
-    if(sizeof(cmd[1]) > 1 &&
-       strstr("+-?!*", cmd[1][<1..<1]) > -1)
+    if (sizeof(cmd[1]) > 1 && strstr("+-?!*", cmd[1][<1..<1]) > -1)
       tmp = cmd[1][0..<2];
     else
       tmp = cmd[1];
-    if(cmd[1] != "?" && cmd[1] != "!")
+
+    if (cmd[1] != "?" && cmd[1] != "!")
     {
       ch = getChannel(tmp);
-      if(pointerp(ch))
+      if (pointerp(ch))
       {
         notify_fail("Diese Angabe war nicht eindeutig! "
                     "Folgende Ebenen passen:\n"
                     +implode(ch, ", ")+"\n");
         return 0;
       }
-      else if(!ch)
-        return (notify_fail("Die Ebene '"+tmp
-                            + "' gibt es nicht!\n"), 0);
+      else if (!ch)
+      {
+        notify_fail("Die Ebene '"+tmp+ "' gibt es nicht!\n");
+        return 0;
+      }
     }
-    //DEBUG(sprintf("ChanCmd: %O\n",cmd));
+
     if (sizeof(cmd[1])) {
-      switch(cmd[1][<1]) {
-    case '+':
-      switch(CHMASTER->join(ch, this_object()))
-      {
-      case E_ACCESS_DENIED:
-        notify_fail("Du darfst an die Ebene '"+ch+"' nicht heran.\n");
-        return 0;
-      case E_ALREADY_JOINED:
-        notify_fail("Du hast diese Ebene schon betreten!\n");
-        return 0;
-      default: break;
-      }
-      write("Du betrittst die Ebene '"+ch+"'.\n");
-      if(member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
-        SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
-      return 1;
-    case '-':
-      switch(CHMASTER->leave(ch, this_object()))
-      {
-      case E_ACCESS_DENIED:
-        write("Du kannst die Ebene '"+ch+"' nicht verlassen.\n");
-        break;
-      case E_NOT_MEMBER:
-        write("Wie willst Du eine Ebene verlassen, welche Du nicht "
-              "betreten hast?\n");
-        break;
-      default:
-        write("Du verlaesst die Ebene '"+ch+"'.\n");
-        SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - ({ lower_case(ch), ch }));
-        break;
-      }
-      return 1;
-    case '!':
-    case '?':
-    {
-      mapping l;
-      if(mappingp(l = CHMASTER->list(this_object())))
-      {
-        if(stringp(ch) && sizeof(ch) && pointerp(l[ch = lower_case(ch)]))
-        {
-          int c; object o; string n; string *m;
-          m=sort_array(map(l[ch][I_MEMBER],#'getName/*'*/, WER),#'>/*'*/);
-          m-=({"<MasteR>"});
-          write(l[ch][I_NAME]+", "+funcall(l[ch][I_INFO])+".\n");
-          write("Du siehst "+((c = sizeof(m)) > 0
-                              ? (c == 1 ? "ein Gesicht" : c+" Gesichter")
-                              : "niemanden")+" auf der Ebene '"
-                                +l[ch][I_NAME]+"':\n");
-          write(break_string(implode(m,", "), 78));
-          write((l[ch][I_MASTER] ?
-                 getName(l[ch][I_MASTER]) : getName(l[ch][I_ACCESS], WER))
-                +" hat das Sagen auf dieser Ebene.\n");
-        }
-        else
-        {
-          string* list = ({});
-          if(cmd[1][<1] == '!')
-            l -= mkmapping(m_indices(l) - QueryProp(P_CHANNELS));
-          walk_mapping(l, #'createList/*'*/, QueryProp(P_CHANNELS), &list);
-          list = sort_array(list, #'>/*'*/);
-          txt = sprintf("%-12.12' 's  [A] %|12' 's (%-3' 's) %-42.42s\n",
-                        "Name", "Eigner", "Sp", "Beschreibung")
-              + "-------------------------------------------------------"
-              + "-----------------------\n"
-              + implode(list, "");
+      switch (cmd[1][<1]) {
+        case '+':
+          switch (CHMASTER->join(ch, this_object()))
+          {
+            case E_ACCESS_DENIED:
+              notify_fail("Du darfst an die Ebene '"+ch+"' nicht heran.\n");
+              return 0;
+            case E_ALREADY_JOINED:
+              notify_fail("Du hast diese Ebene schon betreten!\n");
+              return 0;
+            default:
+              break;
+          }
+          write("Du betrittst die Ebene '"+ch+"'.\n");
+          if (member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
+            SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
+          return 1;
+
+        case '-':
+          switch (CHMASTER->leave(ch, this_object()))
+          {
+            case E_ACCESS_DENIED:
+              write("Du kannst die Ebene '"+ch+"' nicht verlassen.\n");
+              break;
+            case E_NOT_MEMBER:
+              write("Wie willst Du eine Ebene verlassen, welche Du nicht "
+                    "betreten hast?\n");
+              break;
+            default:
+              write("Du verlaesst die Ebene '"+ch+"'.\n");
+              SetProp(P_CHANNELS,
+                      QueryProp(P_CHANNELS) - ({ lower_case(ch), ch }));
+              break;
+          }
+          return 1;
+
+        case '!':
+        case '?':
+          mapping l;
+          if (mappingp(l = CHMASTER->list(this_object())))
+          {
+            if (stringp(ch) && sizeof(ch) && pointerp(l[ch = lower_case(ch)]))
+            {
+              int c; object o; string n; string *m;
+              m = sort_array(
+                    map(l[ch][I_MEMBER],#'getName/*'*/, WER),
+                  #'>/*'*/);
+              m-=({"<MasteR>"});
+              write(l[ch][I_NAME]+", "+funcall(l[ch][I_INFO])+".\n");
+              write("Du siehst "+((c = sizeof(m)) > 0
+                      ? (c == 1 ? "ein Gesicht" : c+" Gesichter")
+                         : "niemanden")+" auf der Ebene '"
+                    +l[ch][I_NAME]+"':\n");
+              write(break_string(implode(m,", "), 78));
+              write((l[ch][I_MASTER] ?
+                  getName(l[ch][I_MASTER]) : getName(l[ch][I_ACCESS], WER))
+                  +" hat das Sagen auf dieser Ebene.\n");
+            }
+            else
+            {
+              string* list = ({});
+              if (cmd[1][<1] == '!')
+                l -= mkmapping(m_indices(l) - QueryProp(P_CHANNELS));
+              walk_mapping(l, #'createList/*'*/, QueryProp(P_CHANNELS), &list);
+              list = sort_array(list, #'>/*'*/);
+              txt = sprintf("%-12.12' 's  [A] %|12' 's (%-3' 's) %-42.42s\n",
+                            "Name", "Eigner", "Sp", "Beschreibung")
+                  + "-------------------------------------------------------"
+                  + "-----------------------\n"
+                  + implode(list, "");
+              More(txt);
+            }
+          }
+          return 1;
+
+        case '*':
+          mixed hist = CHMASTER->history(ch, this_object());
+          if (!pointerp(hist) || !sizeof(hist))
+          {
+            write("Es ist keine Geschichte fuer '"+ch+"' verfuegbar.\n");
+            return 1;
+          }
+
+          //(Zesstra) cmd hat offenbar immer 3 Elemente...
+          //bei -all* ({"","all*",""})
+          //bei -all*10 ({"","all*,"10"})
+          //also ist bei -all* amount immer == 0 und es funktioniert eher
+          //zufaellig.
+          /*if(sizeof(cmd) > 2)
+            amount = to_int(cmd[2]);
+          else
+            amount=sizeof(hist);*/
+          int amount = to_int(cmd[2]);
+          if (amount <= 0 || amount >= sizeof(hist))
+            amount = sizeof(hist);
+
+          txt = "Folgendes ist auf '"+ch+"' passiert:\n"
+              + implode(map(hist[<amount..], #'ChannelMessage/*'*/, 1), "");
           More(txt);
-        }
+          return 1;
+
+        default:
+          break;
       }
-      return 1;
-
-    }
-    case '*':
-    {
-      mixed hist = CHMASTER->history(ch, this_object());
-      if(!pointerp(hist) || !sizeof(hist))
-      {
-        write("Es ist keine Geschichte fuer '"+ch+"' verfuegbar.\n");
-        return 1;
-      }
-
-      //(Zesstra) cmd hat offenbar immer 3 Elemente...
-      //bei -all* ({"","all*",""})
-      //bei -all*10 ({"","all*,"10"})
-      //also ist bei -all* amount immer == 0 und es funktioniert eher zufaellig.
-      /*if(sizeof(cmd) > 2) 
-        amount = to_int(cmd[2]);
-      else 
-        amount=sizeof(hist);*/
-      int amount=to_int(cmd[2]);
-      if (amount <= 0 || amount >= sizeof(hist))
-        amount=sizeof(hist);
-
-      txt = "Folgendes ist auf '"+ch+"' passiert:\n"
-          + implode(map(hist[<amount..], #'ChannelMessage/*'*/, 1), "");
-      More(txt);
-      return 1;
-    }
-    default:
-      break;
-    }
     }
   }
-  if(sizeof(cmd = implode(cmd[2..], "")))
-     args = cmd + (sizeof(args) ? " " : "") + args;
+
+  if (sizeof(cmd = implode(cmd[2..], "")))
+    args = cmd + (sizeof(args) ? " " : "") + args;
 
   // KOntrollchars ausfiltern.
   args = regreplace(args,"[[:cntrl:]]","",RE_PCRE|RE_GLOBAL);
-  if(!sizeof(args)) return 0;
+  if (!sizeof(args))
+    return 0;
 
   //Wenn cmd leer ist: MSG_SAY
-  if (!sizeof(cmd)) type=MSG_SAY;
-  else {
-    switch(cmd[0])
+  if (!sizeof(cmd))
+    type = MSG_SAY;
+  else
+  {
+    switch (cmd[0])
     {
-    case ':' :
-      type = MSG_EMOTE;
-      args = args[1..];
-      break;
-    case ';' :
-      type = MSG_GEMOTE;
-      args = args[1..];
-      break;
-    case '\'':
-      args = args[1..];
-    default  : type = MSG_SAY; break;
+      case ':' :
+        type = MSG_EMOTE;
+        args = args[1..];
+        break;
+      case ';' :
+        type = MSG_GEMOTE;
+        args = args[1..];
+        break;
+      case '\'':
+        args = args[1..];
+        // Der Fallthrough in default ist hier Absicht.
+      default  :
+        type = MSG_SAY;
+        break;
     }
   }
-  if(!ch || !sizeof(ch)) ch = QueryProp(P_STD_CHANNEL);
-  if((err = CHMASTER->send(ch, this_object(), args, type)) < 0)
-    if(!(err = CHMASTER->join(ch, this_object())))
+
+  if (!ch || !sizeof(ch))
+    ch = QueryProp(P_STD_CHANNEL);
+
+  err = CHMASTER->send(ch, this_object(), args, type);
+  if (err < 0)
+  {
+    err = CHMASTER->join(ch, this_object());
+    if (!err)
     {
-      if(member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
+      if (member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
         SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
       err = CHMASTER->send(ch, this_object(), args, type);
     }
+  }
 
-  switch(err)
+  switch (err)
   {
-  case E_ACCESS_DENIED:
-    notify_fail("Auf der Ebene '"+ch+"' darfst Du nichts sagen.\n");
-    return 0;
-  case E_NOT_MEMBER:
-    notify_fail("Du hast die Ebene '"+ch+"' nicht betreten!\n");
-    return 0;
+    case E_ACCESS_DENIED:
+      notify_fail("Auf der Ebene '"+ch+"' darfst Du nichts sagen.\n");
+      return 0;
+    case E_NOT_MEMBER:
+      notify_fail("Du hast die Ebene '"+ch+"' nicht betreten!\n");
+      return 0;
   }
   return 1;
 }
 
 int ChannelAdmin(string args)
 {
+  args = _unparsed_args();
+
   string n, descr, sh, cn;
   mixed tmp;
-  args = _unparsed_args();
   notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"
               "           ebene <Abkuerzung>=\n"
               "           ebene abkuerzungen [standard]\n"
@@ -451,105 +488,143 @@
               "           ebene an|ein|aus\n"
               +(QueryProp(P_LEVEL) >= 5 ?
                 "           ebene neu <Name> <Bezeichnung>\n"
-    "           ebene beschreibung <Name> <Beschreibung>\n" : "")
-        +(IS_ARCH(this_object()) ?
-          "           ebene kill <Name>\n"
-      "           ebene clear <Name>\n": ""));
-  if(!args || !sizeof(args)) return 0;
-  if(sscanf(args, "kill %s", n) && IS_ARCH(this_object()))
+                "           ebene beschreibung <Name> <Beschreibung>\n" : "")
+              +(IS_ARCH(this_object()) ?
+                "           ebene kill <Name>\n"
+                "           ebene clear <Name>\n": ""));
+
+  if (!args || !sizeof(args))
+    return 0;
+
+  if (sscanf(args, "kill %s", n) && IS_ARCH(this_object()))
   {
-    if(!(cn = CHMASTER->find(n, this_object()))) cn = n;
-    switch(CHMASTER->remove(cn, this_object()))
-    {
-    case E_ACCESS_DENIED:
-     notify_fail("Die Ebene '"+cn+"' lies sich nicht entfernen!\n");
-     return 0;
+    cn = CHMASTER->find(n, this_object());
+    if (!cn)
+      cn = n;
+
+    if (CHMASTER->remove(cn, this_object()) == E_ACCESS_DENIED) {
+      notify_fail("Die Ebene '"+cn+"' liess sich nicht entfernen!\n");
+      return 0;
     }
+
     write("Du entfernst die Ebene '"+cn+"'.\n");
     return 1;
   }
-  if(sscanf(args, "clear %s", n) && IS_ARCH(this_object()))
+
+  if (sscanf(args, "clear %s", n) && IS_ARCH(this_object()))
   {
-    if(!(cn = CHMASTER->find(n, this_object()))) cn = n;
-    switch(CHMASTER->clear_history(cn, this_object()))
-    {
-    case E_ACCESS_DENIED:
-     notify_fail("Der Verlauf zur Ebene '"+cn+"' lies sich nicht entfernen!\n");
-     return 0;
+    cn = CHMASTER->find(n, this_object());
+    if (!cn)
+      cn = n;
+
+    if (CHMASTER->clear_history(cn, this_object()) == E_ACCESS_DENIED) {
+      notify_fail("Der Verlauf zur Ebene '"+cn+"' liess sich nicht "
+        "entfernen!\n");
+      return 0;
     }
+
     write("Du entfernst den Verlauf zur Ebene '"+cn+"'.\n");
     return 1;
   }
-  if(sscanf(args, "neu %s %s", n, descr) == 2)
+
+  if (sscanf(args, "neu %s %s", n, descr) == 2)
   {
-    mixed x;
-    if(QueryProp(P_LEVEL) < 5)
-      return (notify_fail("Neue Ebenen zu erstellen ist dir verwehrt.\n"), 0);
-    if(!sizeof(regexp(({ n }), "^" CHANNELCMDS CHANNELCMDS "*")))
-      return (notify_fail("Der Name '"+n+"' ist nicht konform!\n"), 0);
-    if (sizeof(n) > 20 )
-      return(notify_fail("Der Name '"+n+"' ist zu lang.\n"), 0);
-    switch(x = CHMASTER->new(n, this_object(), descr))
+    if (QueryProp(P_LEVEL) < 5)
     {
-    case E_ACCESS_DENIED:
-      notify_fail("Diese Ebene darfst du nicht erschaffen!\n"); break;
-    default:
-      write("Du erschaffst die Ebene '"+n+"'.\n");
-      SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ lower_case(n) }));
-      return 1;
+      notify_fail("Neue Ebenen zu erstellen, ist Dir verwehrt.\n");
+      return 0;
     }
+
+    if (!sizeof(regexp(({ n }), "^" CHANNELCMDS CHANNELCMDS "*")))
+    {
+      notify_fail("Der Name '"+n+"' ist nicht konform!\n");
+      return 0;
+    }
+
+    if (sizeof(n) > 20 )
+    {
+      notify_fail("Der Name '"+n+"' ist zu lang.\n");
+      return 0;
+    }
+
+    if (CHMASTER->new(n, this_object(), descr) == E_ACCESS_DENIED) {
+      notify_fail("Diese Ebene darfst du nicht erschaffen!\n");
+      return 0;
+    }
+    write("Du erschaffst die Ebene '"+n+"'.\n");
+    SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ lower_case(n) }));
+    return 1;
   }
-  if(sscanf(args, "beschreibung %s %s", n, descr) == 2)
+
+  if (sscanf(args, "beschreibung %s %s", n, descr) == 2)
   {
-    mixed ch;
     cn = CHMASTER->find(n, this_object());
-    if(!cn || pointerp(cn))
-      return (notify_fail("Die Ebene '"+n+"' existiert nicht oder die Angabe "
-        "war nicht eindeutig.\n"), 0);
-    ch = CHMASTER->list(this_object());
-    if(ch[lower_case(cn)][I_MASTER] != this_object())
-      return (notify_fail("Du bist nicht berechtigt die Beschreibung der Ebene"
-        " '"+cn+"' zu aendern.\n"), 0);
+    if (!cn || pointerp(cn))
+    {
+      notify_fail("Die Ebene '"+n+"' existiert nicht oder die Angabe "
+        "war nicht eindeutig.\n");
+      return 0;
+    }
+
+    mixed ch = CHMASTER->list(this_object());
+    if (ch[lower_case(cn)][I_MASTER] != this_object())
+    {
+      notify_fail("Du bist nicht berechtigt, die Beschreibung der Ebene"
+        " '"+cn+"' zu aendern.\n");
+      return 0;
+    }
     ch[lower_case(cn)][I_INFO] = descr;
     write("Die Ebene '"+cn+"' hat ab sofort die Beschreibung:\n"+descr+"\n");
     return 1;
   }
-  if(sscanf(args, "%s=%s", sh, n) == 2 && sizeof(n))
+
+  if sscanf(args, "%s=%s", sh, n) == 2 && sizeof(n))
   {
-    mapping sc;
-    if(pointerp(tmp = CHMASTER->find(n, this_object())) || !tmp)
-      return (notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"
-                          +(pointerp(tmp) ? implode(tmp, ", ") + "\n" :
-                            "Ebene '"+n+"' nicht gefunden!\n")), 0);
-    sc = QueryProp(P_CHANNEL_SHORT);
-    if(!sc) sc = ([]);
-    sc[sh] = tmp;
+    tmp = CHMASTER->find(n, this_object());
+    if (pointerp(tmp) || !tmp)
+    {
+      notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"+
+                  (pointerp(tmp) ?
+                      implode(tmp, ", ") + "\n" :
+                      "Ebene '"+n+"' nicht gefunden!\n"));
+      return 0;
+    }
+
+    mapping sc = QueryProp(P_CHANNEL_SHORT) || ([]);
+    m_add(sc, sh, tmp);
     SetProp(P_CHANNEL_SHORT, sc);
+
     shortcut = QueryProp(P_CHANNEL_SHORT);
+
     write("'"+sh+"' wird jetzt als Abkuerzung fuer '"+tmp+"' anerkannt.\n");
     return 1;
   }
-  if(sscanf(args, "%s=", sh))
+
+  if (sscanf(args, "%s=", sh))
   {
-    SetProp(P_CHANNEL_SHORT, m_copy_delete(QueryProp(P_CHANNEL_SHORT) || ([]), sh));
+    SetProp(P_CHANNEL_SHORT,
+      m_copy_delete(QueryProp(P_CHANNEL_SHORT) || ([]), sh));
     shortcut = QueryProp(P_CHANNEL_SHORT);
     write("Du loeschst die Abkuerzung '"+sh+"'.\n");
     return 1;
   }
-  if(args == "an" || args == "ein")
+
+  if (args == "an" || args == "ein")
   {
-    mixed excl;
-    if(pointerp(QueryProp(P_SWAP_CHANNELS)))
+    if (pointerp(QueryProp(P_SWAP_CHANNELS)))
       SetProp(P_CHANNELS, QueryProp(P_SWAP_CHANNELS));
     else
       SetProp(P_CHANNELS, m_indices(CHMASTER->list(this_object())));
-    excl = RegisterChannels();
-    write("Du schaltest folgende Ebenen ein:\n"
-          +break_string(implode(QueryProp(P_CHANNELS) - excl, ", "), 78));
+
+    // <excl> enthaelt die Channelnamen, deren Channel nicht erstellt wurden.
+    string* excl = RegisterChannels();
+    write("Du schaltest folgende Ebenen ein:\n"+
+          break_string(implode(QueryProp(P_CHANNELS) - excl, ", "), 78));
     SetProp(P_SWAP_CHANNELS, 0);
     return 1;
   }
-  if(args == "aus")
+
+  if (args == "aus")
   {
     SetProp(P_SWAP_CHANNELS, QueryProp(P_CHANNELS));
     RemoveChannels();
@@ -557,44 +632,63 @@
     write("Du stellst die Ebenen ab.\n");
     return 1;
   }
+
   string* pa = old_explode(args, " ");
-  if(!strstr("abkuerzungen", pa[0]))
+  if (!strstr("abkuerzungen", pa[0]))
   {
-    string txt; txt = "";
-    if(sizeof(pa) > 1 && !strstr("standard", pa[1]))
+    string txt = "";
+    if (sizeof(pa) > 1 && !strstr("standard", pa[1]))
     {
-      write("Die Standard Abkuerzungen werden gesetzt.\n");
+      write("Die Standardabkuerzungen werden gesetzt.\n");
       SetProp(P_CHANNEL_SHORT, DEFAULT_SHORTCUTS
               + (IS_LEARNER(this_object()) ? WIZARD_SHORTCUTS : ([])));
     }
-    foreach(string abk, string ch_name : QueryProp(P_CHANNEL_SHORT)) {
+    foreach (string abk, string ch_name : QueryProp(P_CHANNEL_SHORT)) {
       txt += sprintf("%5.5s = %s\n", abk, ch_name);
     }
     txt = sprintf("Folgende Abkuerzungen sind definiert:\n%-78#s\n",
-                  implode(sort_array(old_explode(txt, "\n"), #'>/*'*/), "\n"));
+            implode(sort_array(old_explode(txt, "\n"), #'>/*'*/), "\n"));
     More(txt);
     return 1;
   }
-  if(!strstr("standard", pa[0]))
-    if(sizeof(pa) < 2)
-      return (notify_fail("Benutzung: ebene standard <Ebene>\n"
-                          +(QueryProp(P_STD_CHANNEL)
-                            ? "Momentan ist '"+QueryProp(P_STD_CHANNEL)
-                            +"' eingestellt.\n"
-                            : "Es ist keine Standardebene eingestellt.\n")),0);
+
+  if (!strstr("standard", pa[0]))
+  {
+    if (sizeof(pa) < 2)
+    {
+      notify_fail("Benutzung: ebene standard <Ebene>\n"
+                  +(QueryProp(P_STD_CHANNEL) ?
+                    "Momentan ist '"+QueryProp(P_STD_CHANNEL)+
+                      "' eingestellt.\n" :
+                    "Es ist keine Standardebene eingestellt.\n"));
+      return 0;
+    }
     else
-      if(pointerp(tmp = CHMASTER->find(pa[1], this_object())))
-        return (notify_fail("Das war keine eindeutige Angabe! "
-                            "Folgende Ebenen passen:\n"
-                            +break_string(implode(tmp, ", "), 78)), 0);
+    {
+      tmp = CHMASTER->find(pa[1], this_object());
+      if (pointerp(tmp))
+      {
+        notify_fail("Das war keine eindeutige Angabe! "
+                    "Folgende Ebenen passen:\n"+
+                    break_string(implode(tmp, ", "), 78));
+        return 0;
+      }
       else
-        if(!tmp) return (notify_fail("Ebene '"+pa[1]+"' nicht gefunden!\n"),0);
+      {
+        if (!tmp)
+        {
+          notify_fail("Ebene '"+pa[1]+"' nicht gefunden!\n");
+          return 0;
+        }
         else
         {
           write("'"+tmp+"' ist jetzt die Standardebene.\n");
           SetProp(P_STD_CHANNEL, tmp);
           return 1;
         }
+      }
+    }
+  }
   return(0);
 }