Weitgehender Neubau auf intermud-2.5.
Benutzt moderne LDMud-3.5-Sprachmittel wie structs.
diff --git a/secure/inetd/who.c b/secure/inetd/who.c
new file mode 100644
index 0000000..cc2bdef
--- /dev/null
+++ b/secure/inetd/who.c
@@ -0,0 +1,68 @@
+#pragma strict_types, save_types, rtt_checks, pedantic
+#pragma no_clone, no_shadow, no_inherit
+
+inherit __DIR__"i_service";
+
+#include <intermud.h>
+#include <config.h>
+
+int maxtoday, maxever;
+
+public string service_name()
+{
+  return "who";
+}
+
+public void reset()
+{
+  string tmp1=read_file("/etc/maxusers.ever",0,1);
+  string tmp2=read_file("/etc/maxusers",0,1);
+  if (stringp(tmp1)&&sizeof(tmp1)) sscanf(tmp1,"%d %~s",maxever);
+  if (stringp(tmp2)&&sizeof(tmp2)) sscanf(tmp2,"%d %~s",maxtoday);
+}
+
+protected void create()
+{
+  ::create();
+  reset();
+}
+
+string adjust(string str,int wid) {
+  return sprintf("%*|s",wid,str);
+}
+
+// we received an intermud who request
+protected void recv_request(mapping data)
+{
+  string *lines="/obj/werliste"->QueryWhoListe(0, 1);
+  string wholiste=implode(lines,"\n");
+
+  lines=({
+    "*------------------------------------------------------------------------*",
+    "","","","",
+    "*------------------------------------------------------------------------*"
+  });
+  string header=MUDNAME", LDMud "+__VERSION__;
+  lines[1]="|"+adjust(header,sizeof(lines[0])-2)+"|";
+  header="Adresse: MG.Mud.DE (87.79.24.60) 23 (alternativ 4711)";
+  lines[2]="|"+adjust(header,sizeof(lines[0])-2)+"|";
+  header="Uptime: "+uptime();
+  lines[3]="|"+adjust(header,sizeof(lines[0])-2)+"|";
+  header=_MUDLIB_NAME_"-Mudlib "_MUDLIB_VERSION_;
+  lines[4]="|"+adjust(header,sizeof(lines[0])-2)+"|";
+  header=implode(lines,"\n");
+
+  wholiste=header+"\n"+wholiste+
+    sprintf("\n*** Anwesende im "MUDNAME": Max. heute %d, Rekord %d\n",
+        maxtoday,maxever);
+
+  INETD->send(data[NAME],
+              ([REQUEST: REPLY, ID: data[ID],
+                RECIPIENT: data[SENDER],
+                DATA: wholiste
+                ]), 0);
+}
+
+//TODO: request() ?
+//public int request(string mudname, string|int data)
+