
/* SGI module -- random SGI-specific things */

#include "Python.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static PyObject *
sgi_nap(PyObject *self, PyObject *args)
{
    long ticks;
    if (!PyArg_ParseTuple(args, "l:nap", &ticks))
        return NULL;
    Py_BEGIN_ALLOW_THREADS
    sginap(ticks);
    Py_END_ALLOW_THREADS
    Py_INCREF(Py_None);
    return Py_None;
}

extern char *_getpty(int *, int, mode_t, int);

static PyObject *
sgi__getpty(PyObject *self, PyObject *args)
{
    int oflag;
    int mode;
    int nofork;
    char *name;
    int fildes;
    if (!PyArg_ParseTuple(args, "iii:_getpty", &oflag, &mode, &nofork))
        return NULL;
    errno = 0;
    name = _getpty(&fildes, oflag, (mode_t)mode, nofork);
    if (name == NULL) {
        PyErr_SetFromErrno(PyExc_IOError);
        return NULL;
    }
    return Py_BuildValue("(si)", name, fildes);
}

static PyMethodDef sgi_methods[] = {
    {"nap",             sgi_nap,        METH_VARARGS},
    {"_getpty",         sgi__getpty,    METH_VARARGS},
    {NULL,              NULL}           /* sentinel */
};


void
initsgi(void)
{
    Py_InitModule("sgi", sgi_methods);
}
