66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
/*
|
|
* $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 <unistd.h>
|
|
#include <termios.h>
|
|
#include <sys/types.h>
|
|
#include <util/qnx4dev.h>
|
|
|
|
//#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);
|
|
}
|