From 5e1cbd67aad202f6a3222fe7ef5d6fd63bbbcc3e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Tue, 24 Feb 1998 11:26:57 -0800
Subject: [PATCH] new file

Rev: NT/tools/lib.pike:1.1
---
 NT/tools/lib.pike | 102 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)
 create mode 100644 NT/tools/lib.pike

diff --git a/NT/tools/lib.pike b/NT/tools/lib.pike
new file mode 100644
index 0000000000..312afdf8a5
--- /dev/null
+++ b/NT/tools/lib.pike
@@ -0,0 +1,102 @@
+#if !constant(strerror)
+#define strerror(X) X
+#endif
+
+string fixpath(string s)
+{
+  string mnt=getenv("NTMOUNT");
+  if(mnt && strlen(mnt)) s=replace(s,mnt,"");
+  return replace(s,"/","\\");
+}
+
+
+string fixabspath(string s)
+{
+  return replace(s,"/","\\");
+}
+
+string handle_input(object o)
+{
+  if(o->proxy)
+    o->proxy(Stdio.File("stdin"));
+  else
+    thread_create(lambda(object o)
+		 {
+		   object stdin=Stdio.File("stdin");
+		   while(string s=stdin->read(1000,1))
+		     o->write(s);
+		 },o);
+}
+
+
+object low_do_cmd(string *cmd)
+{
+  object(Stdio.File) f=Stdio.File();
+  if(!f->connect(getenv("NTHOST"),(int)getenv("NTPORT")))
+  {
+    werror("Failed to connect "+strerror(errno())+".\n");
+    exit(1);
+  }
+
+  string tmp=getcwd();
+  string mnt=getenv("NTMOUNT");
+  if(mnt && strlen(mnt)) tmp=replace(tmp,mnt,"");
+  cmd=({getenv("NTDRIVE")+replace(tmp,"/","\\")})+cmd;
+  f->write(sprintf("%4c",sizeof(cmd)));
+  for(int e=0;e<sizeof(cmd);e++)
+    f->write(sprintf("%4c%s",strlen(cmd[e]),cmd[e]));
+  return f;
+}
+
+int silent_do_cmd(string *cmd, mixed|void filter)
+{
+  object(Stdio.File) f=low_do_cmd(cmd);
+
+  handle_input(f);
+  string ret="";
+  while(1)
+  {
+    string s;
+    sscanf(f->read(4),"%4c",int len);
+    if(!len) break;
+    write(s=f->read(len));
+    ret+=s;
+  }
+  if(filter) filter(ret);
+  sscanf(f->read(4),"%4c",int code);
+  f->close("r");
+  f->close("w");
+  destruct(f);
+  return code;
+}
+
+string getntenv(string var)
+{
+  string s="";
+  object(Stdio.File) f=low_do_cmd( ({"getenv",var}) );
+  
+  while(1)
+  {
+    sscanf(f->read(4),"%4c", int len);
+    if(!len) break;
+    s+=f->read(len);
+  }
+
+  sscanf(f->read(4),"%4c",int code);
+  f->close("r");
+  f->close("w");
+  destruct(f);
+  return s;
+}
+
+
+int do_cmd(string *cmd, mixed|void filter)
+{
+  werror("DOING "+cmd*" "+"\n");
+  return silent_do_cmd(cmd,filter);
+}
+
+string find_lib_location()
+{
+  return __FILE__;
+}
-- 
GitLab