Mercurial > hg > xemacs-beta
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_ */