New file.

Change-Id: I4595f4cd29e82998d93a73a85c359432002fe504
diff --git a/README b/README
index 9771251..6f9818b 100644
--- a/README
+++ b/README
@@ -7,3 +7,6 @@
   room/huette2.c
 3. Zwei Raeume, die durch Ausgaenge miteinander verbunden sind
   room/huette3a.c, room/huette3b.c
+4. Eine oberflaechliche Kurzeinfuehrung in Commands. Viel zu kurz, aber
+   irgendwo muss man ja anfangen.
+  room/huette4.c
diff --git a/room/huette4.c b/room/huette4.c
new file mode 100644
index 0000000..d9ce77b
--- /dev/null
+++ b/room/huette4.c
@@ -0,0 +1,77 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+int guckstu();
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Viel ist hier in der Huette immer noch nicht los. Aber Du siehst "
+    "in der Wand einen Knopf und einen Spiegel."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+
+  AddDetail("knopf", BSLF(
+    "Es ist ein, aeh, Druckknopf".));
+  AddDetail("spiegel", BSLF(
+    "Du kannst hineinblicken."));
+
+
+  /* Bitte nicht erschrecken, jetzt wirds eklig. Aber Du kannst fuer den
+     Anfang ein wenig mit den Beispielen herumspielen, ich habe versucht,
+     die haeufigsten Faelle, wie man Commands benutzt, abzudecken.
+     Die Erklaerungen habe ich teilweise stark vereinfacht, damit es nicht
+     zu kompliziert wird.
+     Ausfuehrlich steht das alles in "man addcmd" und "man addcmd_bsp",
+     aber diese Hilfeseiten sind sehr lang und vermutlich fuer den Anfang
+     eher verwirrend. Ausserdem gibt es in /doc/beispiele etwas zu AddCmd. */
+
+
+  // 1. Beispiel: Ein Kommando, das nur eine Meldung ausgibt.
+
+  /* Diese erste Zeile nimmst Du am Besten erst einmal so als gegeben hin,
+     in die sieben Abgruende von AddCmd() steigen wir spaeter noch herab. */
+  AddCmd("drueck|druecke&knopf|druckknopf&\n\bimpossible", 0,
+    /* Der dritte Parameter ist ein String, in dem alles weitere aneinander-
+       gefuegt steht, getrennt durch "|" und "^".
+       Zuerst steht die Nachfrage, falls statt "knopf" bzw. "druckknopf" ein
+       falsches Wort eingegeben wurde oder es ganz fehlt: */
+    "Was willst Du @verben?|"
+    // Dann die Ausgabe an den Spieler:
+    "Du drueckst den Knopf. Ein lautes Klingeln ertoent, das sofort "
+    "verstummt, als Du den Knopf loslaesst.^",
+    // Dann die Ausgabe an alle anderen im Raum:
+    "@WER1 klingelt Sturm.^");
+
+
+  // 2. Beispiel: Ein Kommando, wo etwas dynamisch passiert.
+
+  /* Hier steht als zweiter Parameter eine Closure, die gerufen wird. Man
+     kann da alles moegliche machen, der Rueckgabewert entscheidet, ob
+     der Aufruf erfolgreich (!=0) war, oder ob sich das Kommando gar nicht
+     angesprochen fuehlt und die Syntax an anderen Objekten im Raum
+     getestet wird (==0). */
+  AddCmd("blick|blicke&spiegel", #'guckstu,
+    /* Hier auch wieder die Nachfrage, falls "spiegel" nicht oder falsch
+       eingegeben wurde. Die restlichen Ausgaben muss guckstu() erledigen: */
+    "Wo hinein moechtest Du blicken?");
+}
+
+/* Normalerweise sollte man seine Funktionen etwas sinnvoller benennen, aber
+   naja, ist schon spaet ... */
+int guckstu() {
+  tell_object(TP, BSLF(
+    "HILFE! Ein haessliches Monster schaut Dich an:\n"+
+    TP->long());
+  tell_room(TO, BSLF(
+    TP->Name()+" schaut entsetzt in den Spiegel."), ({TP}));
+  return 1;
+  }
+