/* * $QNXLicenseC: * Copyright 2007, QNX Software Systems. All Rights Reserved. * * You must obtain a written license from and pay applicable license fees to QNX * Software Systems before you may reproduce, modify or distribute this software, * or any work that includes all or part of this software. Free development * licenses are available for evaluation and non-commercial purposes. For more * information visit http://licensing.qnx.com or email licensing@qnx.com. * * This file may contain contributions from others. Please review this entire * file for other proprietary rights or license notices, as well as the QNX * Development Suite License Guide at http://licensing.qnx.com/license-guide/ * for other information. * $ */ #include #include #include #include //#ifndef _DEV_ECHO //// include Neutrino 1.00/1.01's dev.h to get _DEV_ECHO etc //#define mpid_t pid_t //#include "common/include/os/nto10_x86/sys/dev.h" //#endif void __set(tcflag_t *ptr, int flag, unsigned set) { if(set) *ptr |= flag; else *ptr &= ~flag; } unsigned dev_mode(int fd, unsigned mode, unsigned mask) { struct termios tios; unsigned omode = 0; if(tcgetattr(fd, &tios) == -1) return(-1); // Convert current flags into a mode if(tios.c_lflag & ECHO) omode |= _DEV_ECHO; if(tios.c_lflag & ICANON) omode |= _DEV_EDIT; if(tios.c_lflag & ISIG) omode |= _DEV_ISIG; if(tios.c_oflag & OPOST) omode |= _DEV_OPOST; // Modify selected flags if(mask & _DEV_ECHO) __set(&tios.c_lflag, ECHO|ECHOE|ECHOK|ECHONL, mode & _DEV_ECHO); if(mask & _DEV_EDIT) __set(&tios.c_lflag, ICANON|IEXTEN, mode & _DEV_EDIT); if(mask & _DEV_EDIT) __set(&tios.c_iflag, ICRNL, mode & _DEV_EDIT); if(mask & _DEV_ISIG) __set(&tios.c_lflag, ISIG, mode & _DEV_ISIG); if(mask & _DEV_OPOST) __set(&tios.c_oflag, OPOST|ONLCR, mode & _DEV_OPOST); if(tcsetattr(fd, TCSANOW, &tios) == -1) return(-1); return(omode); }