diff lib-src/ntlib.c @ 9803:fa698fd10c05

Initial revision
author Richard M. Stallman <rms@gnu.org>
date Tue, 01 Nov 1994 10:27:02 +0000
parents
children ee40177f6c68
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib-src/ntlib.c	Tue Nov 01 10:27:02 1994 +0000
@@ -0,0 +1,90 @@
+/* Utility and Unix shadow routines for GNU Emacs support programs on NT.
+   Copyright (C) 1994 Free Software Foundation, Inc.
+
+   This file is part of GNU Emacs.
+
+   GNU Emacs is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any later
+   version.
+
+   GNU Emacs is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   You should have received a copy of the GNU General Public License along
+   with GNU Emacs; see the file COPYING.  If not, write to the Free Software
+   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+   Geoff Voelker (voelker@cs.washington.edu)                         10-8-94
+*/
+
+#include <windows.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define MAXPATHLEN _MAX_PATH
+
+/* Emulate sleep...we could have done this with a define, but that
+   would necessitate including windows.h in the files that used it.
+   This is much easier.  */
+void
+nt_sleep(int seconds)
+{
+  Sleep (seconds * 1000);
+}
+
+/* Get the current working directory.  */
+int
+getwd (char *dir)
+{
+  return GetCurrentDirectory (MAXPATHLEN, dir);
+}
+
+static HANDLE getppid_parent;
+static int    getppid_ppid;
+
+int
+getppid(void)
+{
+  char *ppid;
+  DWORD result;
+
+  ppid = getenv ("__PARENT_PROCESS_ID");
+  if (!ppid) 
+    {
+      printf("no pid.\n");
+      return 0;
+    } 
+  else 
+    {
+      getppid_ppid = atoi (ppid);
+    }
+
+  if (!getppid_parent) 
+    {
+      getppid_parent = OpenProcess (SYNCHRONIZE, FALSE, atoi(ppid));
+      if (!getppid_parent) 
+	{
+	  printf ("Failed to open handle to parent process: %d\n",
+		 GetLastError());
+	  exit (1);
+	}
+    }
+
+  result = WaitForSingleObject (getppid_parent, 0);
+  switch (result) 
+    {
+    case WAIT_TIMEOUT:
+      /* The parent is still alive.  */
+      return getppid_ppid;
+    case WAIT_OBJECT_0:
+      /* The parent is gone.  Return the pid of Unix init (1).  */
+      return 1;
+    case WAIT_FAILED:
+    default:
+      printf ("Checking parent status failed: %d\n", GetLastError());
+      exit (1);
+    }
+}