// D import file generated from '../../../../libphobos/libdruntime/core/sys/posix/sys/wait.d'
module core.sys.posix.sys.wait;
version (Posix)
{
	private import core.sys.posix.config;

	public import core.sys.posix.sys.types;

	public import core.sys.posix.signal;

	extern (C) 
	{
		version (linux)
		{
			enum WNOHANG = 1;
			enum WUNTRACED = 2;
			private 
			{
				enum __W_CONTINUED = 65535;
				extern (D) int __WTERMSIG(int status);

			}
			extern (D) int WEXITSTATUS(int status);

			extern (D) int WIFCONTINUED(int status);

			extern (D) bool WIFEXITED(int status);

			extern (D) bool WIFSIGNALED(int status);

			extern (D) bool WIFSTOPPED(int status);

			extern (D) int WSTOPSIG(int status);

			extern (D) int WTERMSIG(int status);

		}
		else
		{
			version (OSX)
			{
				enum WNOHANG = 1;
				enum WUNTRACED = 2;
				private enum _WSTOPPED = 127;

				extern (D) int _WSTATUS(int status);

				extern (D) int WEXITSTATUS(int status);

				extern (D) int WIFCONTINUED(int status);

				extern (D) bool WIFEXITED(int status);

				extern (D) bool WIFSIGNALED(int status);

				extern (D) bool WIFSTOPPED(int status);

				extern (D) int WSTOPSIG(int status);

				extern (D) int WTERMSIG(int status);

			}
			else
			{
				version (FreeBSD)
				{
					enum WNOHANG = 1;
					enum WUNTRACED = 2;
					private enum _WSTOPPED = 127;

					extern (D) int _WSTATUS(int status);

					extern (D) int WEXITSTATUS(int status);

					extern (D) int WIFCONTINUED(int status);

					extern (D) bool WIFEXITED(int status);

					extern (D) bool WIFSIGNALED(int status);

					extern (D) bool WIFSTOPPED(int status);

					extern (D) int WSTOPSIG(int status);

					extern (D) int WTERMSIG(int status);

				}
				else
				{
					version (Solaris)
					{
						enum WNOHANG = 64;
						enum WUNTRACED = 4;
						extern (D) int WEXITSTATUS(int status);

						extern (D) int WIFCONTINUED(int status);

						extern (D) bool WIFEXITED(int status);

						extern (D) bool WIFSIGNALED(int status);

						extern (D) bool WIFSTOPPED(int status);

						extern (D) int WSTOPSIG(int status);

						extern (D) int WTERMSIG(int status);

					}
					else
					{
						static assert(false,"Unsupported platform");
					}
				}
			}
		}
		version (Posix)
		{
			pid_t wait(int*);
			pid_t waitpid(pid_t, int*, int);
		}
		version (linux)
		{
			enum WEXITED = 4;
			enum WSTOPPED = 2;
			enum WCONTINUED = 8;
			enum WNOWAIT = 16777216;
			enum idtype_t 
			{
				P_ALL,
				P_PID,
				P_PGID,
			}
			int waitid(idtype_t, id_t, siginfo_t*, int);
		}
		else
		{
			version (OSX)
			{
				enum WEXITED = 4;
				enum WSTOPPED = 8;
				enum WCONTINUED = 16;
				enum WNOWAIT = 32;
				enum idtype_t 
				{
					P_ALL,
					P_PID,
					P_PGID,
				}
				int waitid(idtype_t, id_t, siginfo_t*, int);
			}
			else
			{
				version (FreeBSD)
				{
					enum WSTOPPED = WUNTRACED;
					enum WCONTINUED = 4;
					enum WNOWAIT = 8;
				}
				else
				{
					version (Solaris)
					{
						enum WEXITED = 1;
						enum WTRAPPED = 2;
						enum WSTOPPED = WUNTRACED;
						enum WCONTINUED = 8;
						enum WNOWAIT = 128;
						enum idtype_t 
						{
							P_PID,
							P_PPID,
							P_PGID,
							P_SID,
							P_CID,
							P_UID,
							P_GID,
							P_ALL,
							P_LWPID,
							P_TASKID,
							P_PROJID,
							P_POOLID,
							P_ZONEID,
							P_CTID,
							P_CPUID,
							P_PSETID,
						}
						int waitid(idtype_t, id_t, siginfo_t*, int);
					}
					else
					{
						static assert(false,"Unsupported platform");
					}
				}
			}
		}
	}
}
