Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/more.c b/std/more.c
new file mode 100644
index 0000000..8518981
--- /dev/null
+++ b/std/more.c
@@ -0,0 +1,143 @@
+// MorgenGrauen MUDlib
+//
+// more.c -- more files
+//
+// $Id: more.c 9142 2015-02-04 22:17:29Z Zesstra $
+
+#pragma strict_types
+#pragma save_types
+#pragma no_clone
+#pragma pedantic
+#pragma range_check
+
+inherit "/std/util/pager";
+
+#include <pager.h>
+
+#ifdef GERMAN
+# define MSG_WRAPPED " VOM ANFANG"
+# define MSG_NOT_FOUND " NICHTS GEFUNDEN"
+# define MSG_NO_REGX " FEHLENDER REG. AUSDRUCK"
+# define MSG_ILLEGAL " ILLEGALE ZEILENZAHL"
+# define MSG_HELP "\
+Hilfe fuer more:\n\
+\n\
+b,B -- Eine Seite zurueck.\n\
+u,U -- Eine halbe Seite zurueck.\n\
+f,F -- Eine Seite vorwaerts.\n\
+d,D -- Eine halbe Seite vorwaerts.\n\
+<Zeile> -- Springe zu Zeile <Zeile>\n\
+q,x -- Verlassen von more.\n\
+/<RegExp> -- Nach dem regulaeren Ausdruck <RegExp> suchen.\n"
+#else
+# define MSG_WRAPPED " WRAPPED"
+# define MSG_NOT_FOUND " NOTHING FOUND"
+# define MSG_NO_REGX " NO PREV REGULAR EXPR"
+# define MSG_ILLEGAL " ILLEGAL LINE NUMBER"
+# define MSG_HELP "\
+Help for more:\n\
+\n\
+b,B -- One page back.\n\
+u,U -- Half a page back.\n\
+f,F -- One page forward.\n\
+d,D -- Half a page forward.\n\
+<line> -- Jump to line number <line>\n\
+q,x -- Quit or eXit more.\n\
+/<regexp> -- Search for the regular expression <regexp>.\n"
+#endif
+
+private nosave string cprompt = "";
+
+string prompt(mixed pinfo, string add)
+{
+ int line,max; max = 1;
+ if(pointerp(pinfo))
+ {
+ if(pinfo[CURL] + pinfo[PAGE] >= pinfo[MAXL]) line = pinfo[MAXL];
+ else line = pinfo[CURL] + pinfo[PAGE];
+ max = pinfo[MAXL];
+ }
+ if (pinfo[FLAG] & E_ABS)
+ return sprintf("%s (%d/%d)%s %s",
+ ::prompt(pinfo, ""),
+ line-1, pinfo[MAXL],
+ cprompt, stringp(add)?add:"");
+ else
+ return sprintf("%s(%d%%)%s %s",
+ ::prompt(pinfo, ""),
+ line*100/max,
+ cprompt, stringp(add)?add:"");
+}
+
+int search(mixed pinfo)
+{
+ int l, lines;
+ mixed tmp;
+ l = pinfo[CURL];
+ while((tmp = fread(pinfo, l, pinfo[PAGE])) &&
+ !sizeof(regexp(old_explode(tmp, "\n"), pinfo[REGX])))
+ l += pinfo[PAGE];
+ if(!tmp)
+ {
+ cprompt += MSG_WRAPPED;
+ l = 1;
+ while(l < pinfo[CURL] &&
+ (tmp = fread(pinfo, l, pinfo[PAGE])) &&
+ !sizeof(regexp(old_explode(tmp, "\n"), pinfo[REGX])))
+ l += pinfo[PAGE];
+ if(l >= pinfo[CURL]) return 0;
+ }
+ return l;
+}
+
+varargs int eval_command(mixed in, mixed pinfo)
+{
+ cprompt = "";
+ if(stringp(in))
+ switch(in)
+ {
+ case "?":
+ write(MSG_HELP+"\n");
+ return 0;
+ case "b":
+ case "B":
+ pinfo[CURL] -= pinfo[PAGE];
+ break;
+ case "u":
+ case "U":
+ pinfo[CURL] -= pinfo[PAGE] / 2;
+ break;
+ case "f":
+ case "F":
+ pinfo[CURL] += pinfo[PAGE];
+ break;
+ case "d":
+ case "D":
+ pinfo[CURL] += pinfo[PAGE] / 2;
+ break;
+ default:
+ {
+ int l;
+ if(l = to_int(in))
+ {
+ if(l > pinfo[MAXL] || l < 1) return (cprompt = MSG_ILLEGAL, 0);
+ pinfo[CURL] = l;
+ break;
+ }
+ if(sizeof(in) && in[0] == '/')
+ {
+ if(sizeof(in) == 1)
+ {
+ if(!pinfo[REGX]) return (cprompt = MSG_NO_REGX, 0);
+ }
+ else pinfo[REGX] = in[1..];
+ if(l = search(pinfo)) pinfo[CURL] = l;
+ else return (cprompt = MSG_NOT_FOUND, 0);
+ }
+ else return ::eval_command(in, pinfo);
+ break;
+ }
+ }
+ else return ::eval_command(in, pinfo);
+ return ::eval_command(-1, pinfo);
+}