From 993d8b7c8a9c85506633edbfc98c901d07388ab6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Thu, 31 Dec 1998 16:50:09 -0800
Subject: [PATCH] fixes for running under wine

Rev: NT/tools/lib.pike:1.6
Rev: NT/tools/rntcc:1.20
Rev: NT/tools/sprshd:1.13
---
 NT/tools/lib.pike | 12 ++++---
 NT/tools/rntcc    |  2 +-
 NT/tools/sprshd   | 85 ++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 75 insertions(+), 24 deletions(-)

diff --git a/NT/tools/lib.pike b/NT/tools/lib.pike
index cdfc3fe89d..e3eded8c14 100644
--- a/NT/tools/lib.pike
+++ b/NT/tools/lib.pike
@@ -37,10 +37,14 @@ int silent_do_cmd(string *cmd, mixed|void filter, int|void silent)
 #endif
       {
 	object o=f->pipe(Stdio.PROP_BIDIRECTIONAL | Stdio.PROP_IPC);
-	object proc=Process.create_process(({"wine",
-					       "-debugmsg","fixme-all",
-					       cmd*" "}),
-					   (["stdout":o]));
+	cmd=({"wine",
+	      "-winver","win95",
+	      "-debugmsg","fixme-all",
+	      "-debugmsg","trace+all",
+	      "-debugmsg","+relay",
+	      cmd*" "});
+//	werror("WINE %O\n",cmd);
+	object proc=Process.create_process(cmd,(["stdout":o]));
 	destruct(o);
 	while(1)
 	{
diff --git a/NT/tools/rntcc b/NT/tools/rntcc
index 76c5987c94..89a5348952 100755
--- a/NT/tools/rntcc
+++ b/NT/tools/rntcc
@@ -105,7 +105,7 @@ int main(int argc, string *argv)
     ({"link",Getopt.HAS_ARG, ({"-l"}) }),
     ({"share",Getopt.MAY_HAVE_ARG, ({"-s"}) }),
     ({"ignore",Getopt.MAY_HAVE_ARG, ({"-t"}) }),
-    ({"ignore",Getopt.HAS_ARG, ({"-R","-L"}) }),
+    ({"ignore",Getopt.HAS_ARG, ({"-R","-L","-r"}) }),
     ({"warn",Getopt.MAY_HAVE_ARG, ({"-W"}) }),
     ({"define",Getopt.HAS_ARG, ({"-D"}) }),
     ({"undefine",Getopt.HAS_ARG, ({"-U"})}),
diff --git a/NT/tools/sprshd b/NT/tools/sprshd
index 9d9c500368..7b02963d17 100755
--- a/NT/tools/sprshd
+++ b/NT/tools/sprshd
@@ -2,6 +2,10 @@
 
 inherit Stdio.Port;
 
+#if !constant(Stdio.PROP_IPC)
+#define NO_IPC
+#endif
+
 // Bugfix for some older versions of Pike..
 string combine_path(string s, string ... rest)
 {
@@ -69,6 +73,16 @@ void monitor(object(Stdio.File) io, object proc)
   }
 }
 
+#ifdef WINE
+void my_proxy(Stdio.File from, Stdio.File to)
+{
+  while(string s=from->read(128,1))
+    if(to->write(s)!=strlen(s))
+      return;
+
+}
+#endif
+
 void handle_incoming_connection(object(Stdio.File) io)
 {
   object p;
@@ -81,10 +95,10 @@ void handle_incoming_connection(object(Stdio.File) io)
   }
 
   object pi=Stdio.File();
-#if constant(Stdio.PROP_IPC)
-  object p2=pi->pipe(Stdio.PROP_IPC);
-#else
+#ifdef NO_IPC
   object p2=pi->pipe();
+#else
+  object p2=pi->pipe(Stdio.PROP_IPC);
 #endif
   string dir=cmd[0];
   cmd=cmd[1..];
@@ -144,19 +158,35 @@ void handle_incoming_connection(object(Stdio.File) io)
     }
 
     default:
+#ifdef WINE
+    {
+      werror("Proxying.....\n");
+      object p3=Stdio.File();
+#ifdef NO_IPC
+      object p4=p3->pipe();
+#else
+      object p4=p3->pipe(Stdio.PROP_IPC);
+#endif
+      thread_create(my_proxy,io,p4);
+      io=p3;
+    }
+#endif
+
       mixed err=catch {
 	p=Process.create_process(cmd,
 				 ([
+#ifndef WINE
 				   "stdin":io,
 				   "stdout":p2,
 				   "stderr":p2,
+#endif
 				   "cwd":dir,
 				   ]));
       };
       destruct(p2);
       if(!err)
       {
-#if !constant(Stdio.PROP_IPC)
+#ifdef NO_IPC
 	thread_create(monitor,p2,p);
 #endif
 	while(1)
@@ -169,6 +199,7 @@ void handle_incoming_connection(object(Stdio.File) io)
 	io->write(sprintf("%4c",0));
 	io->write(sprintf("%4c",p->wait()));
       }else{
+	werror(master()->describe_backtrace(err));
 	destruct(p2);
 	io->write(sprintf("%4c",0));
 	io->write(sprintf("%4c",69));
@@ -178,8 +209,30 @@ void handle_incoming_connection(object(Stdio.File) io)
   destruct(io);
 }
 
+void handle_connections(string *hosts)
+{
+  while(1)
+  {
+    if(object io=accept())
+    {
+      sscanf(io->query_address(),"%s ",string ip);
+      if(search(hosts, ip)==-1)
+      {
+	destruct(io);
+	continue;
+      }
+      thread_create(handle_incoming_connection,io);
+    }else{
+      werror("Accept failed "+errno()+"\n");
+    }
+  }
+}
+
 int main(int argc, string *argv)
 {
+#ifdef WINE
+  werror("Running in WINE mode.\n");
+#endif
   if(argc<2)
   {
     werror("Usage: sprshd <port> <hosts to accept connections from>\n");
@@ -209,19 +262,13 @@ int main(int argc, string *argv)
   }
 
   write("Ready ("+version()+").\n");
-  while(1)
-  {
-    if(object io=accept())
-    {
-      sscanf(io->query_address(),"%s ",string ip);
-      if(search(hosts, ip)==-1)
-      {
-	destruct(io);
-	continue;
-      }
-      thread_create(handle_incoming_connection,io);
-    }else{
-      werror("Accept failed "+errno()+"\n");
-    }
-  }
+
+#ifdef WINE
+  thread_create(handle_connections,hosts);
+  werror("main returning...\n");
+  return -1;
+#else
+  handle_connection(hosts);
+  return 0;
+#endif
 }
-- 
GitLab