diff src/nt.h @ 100:4be1180a9e89 r20-1b2

Import from CVS: tag r20-1b2
author cvs
date Mon, 13 Aug 2007 09:15:11 +0200
parents
children 41ff10fd062f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nt.h	Mon Aug 13 09:15:11 2007 +0200
@@ -0,0 +1,134 @@
+#ifndef _NT_H_
+#define _NT_H_
+
+/* Support routines for the NT version of XEmacs.
+   Copyright (C) 1994 Free Software Foundation, Inc.
+
+This file is part of XEmacs.
+
+XEmacs 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.
+
+XEmacs 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 XEmacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Adapted for XEmacs by David Hobley <david@spook-le0.cia.com.au> */
+
+/* #define FULL_DEBUG */
+#define EMACSDEBUG
+
+#ifdef EMACSDEBUG
+#define DebPrint(stuff) _DebPrint stuff
+#else
+#define DebPrint(stuff)
+#endif
+
+#define R_OK 4
+#define W_OK 2
+#define X_OK 1
+#define F_OK 0
+
+/* File descriptor set emulation.  */
+
+/* MSVC runtime library has limit of 64 descriptors by default */
+#define FD_SETSIZE  64
+typedef struct {
+  unsigned int bits[FD_SETSIZE / 32];
+} fd_set;
+
+/* standard access macros */
+#define FD_SET(n, p) \
+  do { \
+    if ((n) < FD_SETSIZE) { \
+      (p)->bits[(n)/32] |= (1 << (n)%32); \
+    } \
+  } while (0)
+#define FD_CLR(n, p) \
+  do { \
+    if ((n) < FD_SETSIZE) { \
+      (p)->bits[(n)/32] &= ~(1 << (n)%32); \
+    } \
+  } while (0)
+#define FD_ISSET(n, p) ((n) < FD_SETSIZE ? ((p)->bits[(n)/32] & (1 << (n)%32)) : 0)
+#define FD_ZERO(p) memset((p), 0, sizeof(fd_set))
+
+#define SELECT_TYPE fd_set
+
+/* ------------------------------------------------------------------------- */
+
+/* child_process.status values */
+enum {
+  STATUS_READ_ERROR = -1,
+  STATUS_READ_READY,
+  STATUS_READ_IN_PROGRESS,
+  STATUS_READ_FAILED,
+  STATUS_READ_SUCCEEDED,
+  STATUS_READ_ACKNOWLEDGED
+};
+
+/* This structure is used for both pipes and sockets; for
+   a socket, the process handle in pi is NULL. */
+typedef struct _child_process
+{
+  int                   fd;
+  int                   pid;
+  int                   is_dos_process;
+  HANDLE                char_avail;
+  HANDLE                char_consumed;
+  HANDLE                thrd;
+  PROCESS_INFORMATION   procinfo;
+  volatile int          status;
+  char                  chr;
+} child_process;
+
+#define MAXDESC FD_SETSIZE
+#define MAX_CHILDREN  MAXDESC/2
+#define CHILD_ACTIVE(cp) ((cp)->char_avail != NULL)
+
+/* parallel array of private info on file handles */
+typedef struct
+{
+  unsigned         flags;
+  HANDLE           hnd;
+  child_process *  cp;
+} filedesc;
+
+extern filedesc fd_info [ MAXDESC ];
+
+/* fd_info flag definitions */
+#define FILE_READ    0x0001
+#define FILE_WRITE   0x0002
+#define FILE_BINARY  0x0010
+#define FILE_PIPE    0x0100
+#define FILE_SOCKET  0x0200
+
+extern child_process * new_child (void);
+extern void delete_child (child_process *cp);
+
+/* ------------------------------------------------------------------------- */
+
+
+/* Prepare our standard handles for proper inheritance by child processes.  */
+extern void prepare_standard_handles (int in, int out, 
+				      int err, HANDLE handles[4]);
+
+/* Reset our standard handles to their original state.  */
+extern void reset_standard_handles (int in, int out, 
+				    int err, HANDLE handles[4]);
+
+/* Return the string resource associated with KEY of type TYPE.  */
+extern LPBYTE nt_get_resource (char * key, LPDWORD type);
+
+extern void init_ntproc ();
+extern void term_ntproc ();
+
+#endif /* _NT_H_ */