Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/obj/tools/MGtool/toollib.c b/obj/tools/MGtool/toollib.c
new file mode 100644
index 0000000..9464004
--- /dev/null
+++ b/obj/tools/MGtool/toollib.c
@@ -0,0 +1,192 @@
+/*
+ * MGtool-1.0
+ * File: toollib.c
+ * Maintainer: Kirk@MorgenGrauen
+ */
+
+/*------------------------------------------*/
+/* the original Xtool is copyrighted by Hyp */
+/*------------------------------------------*/
+
+#include "toollib.h"
+#include <lpctypes.h>
+#include <properties.h>
+/*
+string *old_explode(string str, string del)
+{
+ int s, t;
+ string *strs;
+
+ if(del == "")
+ return ({str});
+ strs=explode(str, del);
+ s=0;
+ t=sizeof(strs)-1;
+ while(s<=t && strs[s++] == "")
+ ;
+ s--;
+ while(t>=0 && strs[t--] == "")
+ ;
+ t++;
+ if(s<=t)
+ return strs[s..t];
+ return 0;
+}
+
+string *explode(string str, string del)
+{
+ return explode(str, del);
+}
+*/
+string *strip_explode(string str, string del)
+{
+ return explode(str, del)-({""});
+}
+
+string strip_string(string str)
+{
+ return implode(strip_explode(str," ")," ");
+}
+
+int string_compare(string a, string b)
+{
+ return a==b?0:(a>b?1:-1);
+}
+
+string cap_string(string str)
+{
+ return capitalize(str);
+}
+
+string short_path(string file)
+{
+ int s;
+ string tmp;
+
+ if(!file)
+ return 0;
+ if(PL)
+ {
+ if(file[0.. 8]=="/players/")
+ {
+ s=sizeof(getuid(PL))+8;
+ return "~"+(file[9.. s]==getuid(PL) ?
+ file[s+1.. <1] : file[9.. <1]);
+ }
+ }
+ if(file[0.. 2]=="/d/")
+ return "+"+file[3.. <1];
+ else
+ return file;
+}
+
+string long_path(string file)
+{
+ return (string)MASTER->make_path_absolute(file);
+}
+
+string *long_get_dir(string pat, int all)
+{
+ int i, s;
+ string str, dir, *file, *tmp;
+
+ if(!pat)
+ return ({});
+ pat=long_path(pat);
+ if(tmp=old_explode(pat, "/"))
+ dir="/"+implode(tmp[0..sizeof(tmp)-2], "/")+"/";
+ else
+ dir="/";
+ s=sizeof(tmp=get_dir(pat));
+ file=({});
+ for(i=0;i<s;i++)
+ {
+ str=dir+tmp[i];
+ if(all||file_size(str)>=0)
+ file+=({str});
+ }
+ return file;
+}
+
+string lit_string(string str)
+{
+ str=string_replace(str, "\\", "\\\\");
+ str=string_replace(str, "\b", "\\b");
+ str=string_replace(str, "\n", "\\n");
+ str=string_replace(str, "\r", "\\r");
+ str=string_replace(str, "\t", "\\t");
+ return string_replace(str, "\"", "\\\"");
+}
+
+string mixed_to_string(mixed mix, int lvl)
+{
+ int i, j, s, t;
+ string str;
+ mixed *keys;
+
+ if(lvl)
+ {
+ switch(typeof(mix))
+ {
+ default:
+ case T_INVALID:
+ return "<invalid>";
+ case T_STRUCT:
+ return to_string(mix);
+ case T_LVALUE:
+ return "&"+mixed_to_string(mix, lvl-1);
+ case T_NUMBER:
+ case T_FLOAT:
+ return to_string(mix);
+ case T_STRING:
+ return "\""+lit_string(mix)+"\"";
+ case T_POINTER:
+ return "({"+implode(map(mix,"mixed_to_string",ME,lvl-1),",")+"})";
+ case T_OBJECT:
+ return "["+short_path(object_name((object)mix))+"]";
+ case T_MAPPING:
+ s=sizeof(keys=m_indices(mix));
+ t=get_type_info(mix, 1);
+ str="([";
+ for(i=0;i<s;i++)
+ {
+ str+=mixed_to_string(keys[i], lvl-1);
+ if(t)
+ {
+ str+=":"+mixed_to_string(mix[keys[i],0], lvl-1);
+ for(j=1;j<t;j++)
+ str+=";"+mixed_to_string(mix[keys[i],j], lvl-1);
+ }
+ if(i<s-1) str+=",";
+ }
+ return str+"])";
+ case T_CLOSURE:
+ case T_SYMBOL:
+ return sprintf("%O", mix);
+ case T_QUOTED_ARRAY:
+ return "'"+mixed_to_string(funcall(lambda(0, mix)), lvl-1);
+ }
+ }
+ return "...";
+}
+
+int is_player(object obj)
+{
+ return is_obj(obj)&&query_once_interactive(obj);
+}
+
+int is_not_player(object obj)
+{
+ return is_obj(obj)&&!is_player(obj);
+}
+
+int round(float val)
+{
+ int tmp;
+
+ tmp=(int)val;
+ // only positive val
+ if( val - tmp >= 0.5 )
+ return tmp+1;
+ return tmp;
+}