1 /* 2 * Copyright (c) 2000,2001 Ben Lindstrom. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25 #include "includes.h" 26 27 #ifdef HAVE_NEXT 28 #include <errno.h> 29 #include <sys/wait.h> 30 #include "bsd-nextstep.h" 31 32 pid_t 33 posix_wait(int *status) 34 { 35 union wait statusp; 36 pid_t wait_pid; 37 38 #undef wait /* Use NeXT's wait() function */ 39 wait_pid = wait(&statusp); 40 if (status) 41 *status = (int) statusp.w_status; 42 43 return (wait_pid); 44 } 45 46 int 47 tcgetattr(int fd, struct termios *t) 48 { 49 return (ioctl(fd, TIOCGETA, t)); 50 } 51 52 int 53 tcsetattr(int fd, int opt, const struct termios *t) 54 { 55 struct termios localterm; 56 57 if (opt & TCSASOFT) { 58 localterm = *t; 59 localterm.c_cflag |= CIGNORE; 60 t = &localterm; 61 } 62 switch (opt & ~TCSASOFT) { 63 case TCSANOW: 64 return (ioctl(fd, TIOCSETA, t)); 65 case TCSADRAIN: 66 return (ioctl(fd, TIOCSETAW, t)); 67 case TCSAFLUSH: 68 return (ioctl(fd, TIOCSETAF, t)); 69 default: 70 errno = EINVAL; 71 return (-1); 72 } 73 } 74 75 int tcsetpgrp(int fd, pid_t pgrp) 76 { 77 return (ioctl(fd, TIOCSPGRP, &pgrp)); 78 } 79 80 speed_t cfgetospeed(const struct termios *t) 81 { 82 return (t->c_ospeed); 83 } 84 85 speed_t cfgetispeed(const struct termios *t) 86 { 87 return (t->c_ispeed); 88 } 89 90 int 91 cfsetospeed(struct termios *t,int speed) 92 { 93 t->c_ospeed = speed; 94 return (0); 95 } 96 97 int 98 cfsetispeed(struct termios *t, int speed) 99 { 100 t->c_ispeed = speed; 101 return (0); 102 } 103 #endif /* HAVE_NEXT */ 104