Initial commit
This commit is contained in:
65
lib/qnx43/nto/dev_mode.c
Normal file
65
lib/qnx43/nto/dev_mode.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* $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);
|
||||
}
|
||||
Reference in New Issue
Block a user