Index: trunk/src/emx/include/sys/sem.h
===================================================================
--- trunk/src/emx/include/sys/sem.h	(revision 1980)
+++ trunk/src/emx/include/sys/sem.h	(revision 1980)
@@ -0,0 +1,119 @@
+/* $FreeBSD: src/sys/sys/sem.h,v 1.27 2003/06/02 17:23:37 schweikh Exp $ */
+/*	$NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $	*/
+
+/*
+ * SVID compatible sem.h file
+ *
+ * Author:  Daniel Boulet
+ */
+
+#ifndef _SYS_SEM_H_
+#define _SYS_SEM_H_
+
+#include <sys/ipc.h>
+
+struct sem;
+
+struct semid_ds {
+	struct ipc_perm	sem_perm;	/* operation permission struct */
+	struct sem	*sem_base;	/* pointer to first semaphore in set */
+	unsigned short	sem_nsems;	/* number of sems in set */
+	time_t		sem_otime;	/* last operation time */
+	long		sem_pad1;	/* SVABI/386 says I need this here */
+	time_t		sem_ctime;	/* last change time */
+    					/* Times measured in secs since */
+    					/* 00:00:00 GMT, Jan. 1, 1970 */
+	long		sem_pad2;	/* SVABI/386 says I need this here */
+	long		sem_pad3[4];	/* SVABI/386 says I need this here */
+};
+
+/*
+ * semop's sops parameter structure
+ */
+struct sembuf {
+	unsigned short	sem_num;	/* semaphore # */
+	short		sem_op;		/* semaphore operation */
+	short		sem_flg;	/* operation flags */
+};
+#define SEM_UNDO	010000
+
+/*
+ * semctl's arg parameter structure
+ */
+union semun {
+	int		val;		/* value for SETVAL */
+	struct		semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
+	unsigned short	*array;		/* array for GETALL & SETALL */
+};
+
+/*
+ * commands for semctl
+ */
+#define GETNCNT	3	/* Return the value of semncnt {READ} */
+#define GETPID	4	/* Return the value of sempid {READ} */
+#define GETVAL	5	/* Return the value of semval {READ} */
+#define GETALL	6	/* Return semvals into arg.array {READ} */
+#define GETZCNT	7	/* Return the value of semzcnt {READ} */
+#define SETVAL	8	/* Set the value of semval to arg.val {ALTER} */
+#define SETALL	9	/* Set semvals from arg.array {ALTER} */
+#define SEM_STAT 10	/* Like IPC_STAT but treats semid as sema-index */
+#define SEM_INFO 11	/* Like IPC_INFO but treats semid as sema-index */
+
+/*
+ * Permissions
+ */
+#define SEM_A		IPC_W	/* alter permission */
+#define SEM_R		IPC_R	/* read permission */
+
+#ifdef _KERNEL
+
+/*
+ * semaphore info struct
+ */
+struct seminfo {
+	int	semmap,		/* # of entries in semaphore map */
+		semmni,		/* # of semaphore identifiers */
+		semmns,		/* # of semaphores in system */
+		semmnu,		/* # of undo structures in system */
+		semmsl,		/* max # of semaphores per id */
+		semopm,		/* max # of operations per semop call */
+		semume,		/* max # of undo entries per process */
+		semusz,		/* size in bytes of undo structure */
+		semvmx,		/* semaphore maximum value */
+		semaem;		/* adjust on exit max value */
+};
+extern struct seminfo	seminfo;
+
+/* internal "mode" bits */
+#define	SEM_ALLOC	01000	/* semaphore is allocated */
+#define	SEM_DEST	02000	/* semaphore will be destroyed on last detach */
+
+/*
+ * Process sem_undo vectors at proc exit.
+ */
+void	semexit(struct proc *p);
+#endif /* _KERNEL */
+
+#ifndef _KERNEL
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#ifndef _SIZE_T_DECLARED
+typedef __size_t        size_t;
+#define _SIZE_T_DECLARED
+#endif
+
+#ifndef _PID_T_DECLARED
+typedef __pid_t         pid_t;
+#define _PID_T_DECLARED
+#endif
+
+__BEGIN_DECLS
+int semsys(int, ...);
+int semctl(int, int, int, ...);
+int semget(key_t, int, int);
+int semop(int, struct sembuf *, size_t);
+__END_DECLS
+#endif /* !_KERNEL */
+
+#endif /* !_SYS_SEM_H_ */
Index: trunk/src/emx/include/sys/shm.h
===================================================================
--- trunk/src/emx/include/sys/shm.h	(revision 1980)
+++ trunk/src/emx/include/sys/shm.h	(revision 1980)
@@ -0,0 +1,123 @@
+/* $FreeBSD: src/sys/sys/shm.h,v 1.19 2003/01/25 21:33:05 alfred Exp $ */
+/*	$NetBSD: shm.h,v 1.15 1994/06/29 06:45:17 cgd Exp $	*/
+
+/*
+ * Copyright (c) 1994 Adam Glass
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by Adam Glass.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * As defined+described in "X/Open System Interfaces and Headers"
+ *                         Issue 4, p. XXX
+ */
+
+#ifndef _SYS_SHM_H_
+#define _SYS_SHM_H_
+
+#include <sys/ipc.h>
+
+#define SHM_RDONLY  010000  /* Attach read-only (else read-write) */
+#define SHM_RND     020000  /* Round attach address to SHMLBA */
+#define SHMLBA      PAGE_SIZE /* Segment low boundary address multiple */
+
+/* "official" access mode definitions; somewhat braindead since you have
+   to specify (SHM_* >> 3) for group and (SHM_* >> 6) for world permissions */
+#define SHM_R       (IPC_R)
+#define SHM_W       (IPC_W)
+
+/* predefine tbd *LOCK shmctl commands */
+#define	SHM_LOCK	11
+#define	SHM_UNLOCK	12
+
+/* ipcs shmctl commands */
+#define	SHM_STAT	13
+#define	SHM_INFO	14
+
+struct shmid_ds {
+	struct ipc_perm shm_perm;	/* operation permission structure */
+	int             shm_segsz;	/* size of segment in bytes */
+	pid_t           shm_lpid;   /* process ID of last shared memory op */
+	pid_t           shm_cpid;	/* process ID of creator */
+	short		shm_nattch;	/* number of current attaches */
+	time_t          shm_atime;	/* time of last shmat() */
+	time_t          shm_dtime;	/* time of last shmdt() */
+	time_t          shm_ctime;	/* time of last change by shmctl() */
+	void           *shm_internal;   /* sysv stupidity */
+};
+
+#ifdef _KERNEL
+
+/*
+ * System 5 style catch-all structure for shared memory constants that
+ * might be of interest to user programs.  Do we really want/need this?
+ */
+struct shminfo {
+	int	shmmax,		/* max shared memory segment size (bytes) */
+		shmmin,		/* min shared memory segment size (bytes) */
+		shmmni,		/* max number of shared memory identifiers */
+		shmseg,		/* max shared memory segments per process */
+		shmall;		/* max amount of shared memory (pages) */
+};
+extern struct shminfo	shminfo;
+extern struct shmid_ds	*shmsegs;
+
+struct shm_info {
+	int used_ids;
+	unsigned long shm_tot;
+	unsigned long shm_rss;
+	unsigned long shm_swp;
+	unsigned long swap_attempts;
+	unsigned long swap_successes;
+};
+
+struct thread;
+struct proc;
+struct vmspace;
+
+void	shmexit(struct vmspace *);
+void	shmfork(struct proc *, struct proc *);
+#else /* !_KERNEL */
+
+#include <sys/cdefs.h>
+
+#ifndef _SIZE_T_DECLARED
+typedef __size_t        size_t;
+#define _SIZE_T_DECLARED
+#endif
+
+__BEGIN_DECLS
+int shmsys(int, ...);
+void *shmat(int, const void *, int);
+int shmget(key_t, size_t, int);
+int shmctl(int, int, struct shmid_ds *);
+int shmdt(const void *);
+__END_DECLS
+
+#endif /* !_KERNEL */
+
+#endif /* !_SYS_SHM_H_ */
