+++ /dev/null
-/****************************************************************************
- * *
- * GNAT COMPILER COMPONENTS *
- * *
- * E X P E C T *
- * *
- * C Implementation File *
- * *
- * $Revision: 1.1 $
- * *
- * Copyright (C) 2001 Ada Core Technologies, Inc. *
- * *
- * GNAT is free software; you can redistribute it and/or modify it under *
- * terms of the GNU General Public License as published by the Free Soft- *
- * ware Foundation; either version 2, or (at your option) any later ver- *
- * sion. GNAT is distributed in the hope that it will be useful, but WITH- *
- * OUT 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 distributed with GNAT; see file COPYING. If not, write *
- * to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- * *
- * As a special exception, if you link this file with other files to *
- * produce an executable, this file does not by itself cause the resulting *
- * executable to be covered by the GNU General Public License. This except- *
- * ion does not however invalidate any other reasons why the executable *
- * file might be covered by the GNU Public License. *
- * *
- * GNAT was originally developed by the GNAT team at New York University. *
- * It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). *
- * *
- ****************************************************************************/
-
-#ifdef __alpha_vxworks
-#include "vxWorks.h"
-#endif
-
-#ifdef IN_RTS
-#define POSIX
-#include "tconfig.h"
-#include "tsystem.h"
-#else
-#include "config.h"
-#include "system.h"
-#endif
-
-/* This file provides the low level functionalities needed to implement Expect
- capabilities in GNAT.Expect.
- Implementations for unix and windows systems is provided.
- Dummy stubs are also provided for other systems. */
-
-#ifdef _AIX
-/* Work around the fact that gcc/cpp does not define "unix" under AiX. */
-#define unix
-#endif
-
-#ifdef _WIN32
-
-#include <windows.h>
-#include <process.h>
-
-/* ??? Provide a no-op for now */
-
-void
-kill ()
-{
-}
-
-int
-__gnat_expect_fork ()
-{
- return 0;
-}
-
-void
-__gnat_expect_portable_execvp (cmd, argv)
- char *cmd;
- char *argv[];
-{
- (void) spawnve (_P_NOWAIT, cmd, argv, NULL);
-}
-
-int
-__gnat_pipe (fd)
- int *fd;
-{
- HANDLE read, write;
-
- CreatePipe (&read, &write, NULL, 0);
- fd[0]=_open_osfhandle (read, 0);
- fd[1]=_open_osfhandle (write, 0);
- return 0; /* always success */
-}
-
-int
-__gnat_expect_poll (fd, num_fd, timeout, is_set)
- int *fd;
- int num_fd;
- int timeout;
- int *is_set;
-{
- int i, num;
- DWORD avail;
- HANDLE handles[num_fd];
-
- for (i = 0; i < num_fd; i++)
- is_set[i] = 0;
-
- for (i = 0; i < num_fd; i++)
- handles[i] = (HANDLE) _get_osfhandle (fd [i]);
-
- num = timeout / 10;
-
- while (1)
- {
- for (i = 0; i < num_fd; i++)
- {
- if (!PeekNamedPipe (handles [i], NULL, 0, NULL, &avail, NULL))
- return -1;
-
- if (avail > 0)
- {
- is_set[i] = 1;
- return 1;
- }
- }
-
- if (timeout >= 0 && num == 0)
- return 0;
-
- Sleep (10);
- num--;
- }
-}
-
-#elif defined (unix)
-
-#include <sys/time.h>
-
-#ifndef NO_FD_SET
-#define SELECT_MASK fd_set
-#else /* !NO_FD_SET */
-#ifndef _AIX
-typedef long fd_mask;
-#endif /* _AIX */
-#ifdef _IBMR2
-#define SELECT_MASK void
-#else /* !_IBMR2 */
-#define SELECT_MASK int
-#endif /* !_IBMR2 */
-#endif /* !NO_FD_SET */
-
-int
-__gnat_pipe (fd)
- int *fd;
-{
- return pipe (fd);
-}
-
-int
-__gnat_expect_fork ()
-{
- return fork ();
-}
-
-void
-__gnat_expect_portable_execvp (cmd, argv)
- char *cmd;
- char *argv[];
-{
- execvp (cmd, argv);
-}
-
-int
-__gnat_expect_poll (fd, num_fd, timeout, is_set)
- int *fd;
- int num_fd;
- int timeout;
- int *is_set;
-{
- struct timeval tv;
- SELECT_MASK rset;
- int max_fd = 0;
- int ready;
- int i;
-
- FD_ZERO (&rset);
-
- for (i = 0; i < num_fd; i++)
- {
- FD_SET (fd [i], &rset);
- if (fd [i] > max_fd)
- max_fd = fd [i];
- }
-
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
-
- ready = select (max_fd + 1, &rset, NULL, NULL, timeout == -1 ? NULL : &tv);
-
- if (ready > 0)
- for (i = 0; i < num_fd; i++)
- is_set [i] = (FD_ISSET (fd [i], &rset) ? 1 : 0);
-
- return ready;
-}
-
-#else
-
-int
-__gnat_pipe (fd)
- int *fd;
-{
- return -1;
-}
-
-int
-__gnat_expect_fork ()
-{
- return -1;
-}
-
-void
-__gnat_expect_portable_execvp (cmd, argv)
- char *cmd;
- char *argv[];
-{
-}
-
-int
-__gnat_expect_poll (fd, num_fd, timeout, is_set)
- int *fd;
- int num_fd;
- int timeout;
- int *is_set;
-{
- return -1;
-}
-#endif