11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Copyright (c) 2000,2001 Ben Lindstrom.  All rights reserved.
31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Redistribution and use in source and binary forms, with or without
51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * modification, are permitted provided that the following conditions
61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * are met:
71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 1. Redistributions of source code must retain the above copyright
81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    notice, this list of conditions and the following disclaimer.
91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 2. Redistributions in binary form must reproduce the above copyright
101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    notice, this list of conditions and the following disclaimer in the
111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    documentation and/or other materials provided with the distribution.
121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include "includes.h"
261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifdef HAVE_NEXT
281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <errno.h>
291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <sys/wait.h>
301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include "bsd-nextstep.h"
311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodpid_t
331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodposix_wait(int *status)
341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	union wait statusp;
361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	pid_t wait_pid;
371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	#undef wait			/* Use NeXT's wait() function */
391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	wait_pid = wait(&statusp);
401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	if (status)
411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		*status = (int) statusp.w_status;
421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (wait_pid);
441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint
471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtcgetattr(int fd, struct termios *t)
481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (ioctl(fd, TIOCGETA, t));
501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint
531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtcsetattr(int fd, int opt, const struct termios *t)
541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	struct termios localterm;
561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	if (opt & TCSASOFT) {
581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		localterm = *t;
591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		localterm.c_cflag |= CIGNORE;
601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		t = &localterm;
611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	}
621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	switch (opt & ~TCSASOFT) {
631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	case TCSANOW:
641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		return (ioctl(fd, TIOCSETA, t));
651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	case TCSADRAIN:
661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		return (ioctl(fd, TIOCSETAW, t));
671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	case TCSAFLUSH:
681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		return (ioctl(fd, TIOCSETAF, t));
691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	default:
701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		errno = EINVAL;
711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		return (-1);
721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	}
731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint tcsetpgrp(int fd, pid_t pgrp)
761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (ioctl(fd, TIOCSPGRP, &pgrp));
781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodspeed_t cfgetospeed(const struct termios *t)
811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (t->c_ospeed);
831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodspeed_t cfgetispeed(const struct termios *t)
861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (t->c_ispeed);
881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint
911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcfsetospeed(struct termios *t,int speed)
921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	t->c_ospeed = speed;
941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (0);
951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint
981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcfsetispeed(struct termios *t, int speed)
991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{
1001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	t->c_ispeed = speed;
1011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	return (0);
1021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}
1031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* HAVE_NEXT */
104