summaryrefslogtreecommitdiffstats
path: root/StdLib
diff options
context:
space:
mode:
authordarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2012-09-25 22:01:58 +0000
committerdarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2012-09-25 22:01:58 +0000
commitc352b29843007c2f70660e4023aef01e5b9ba8f5 (patch)
tree4507f626c9a82ecdef6840580d3bbaaf9ca8c791 /StdLib
parent9fa90bb49168d42ce0e178d1ada97de4f768a922 (diff)
downloadedk2-c352b29843007c2f70660e4023aef01e5b9ba8f5.tar.gz
edk2-c352b29843007c2f70660e4023aef01e5b9ba8f5.tar.bz2
edk2-c352b29843007c2f70660e4023aef01e5b9ba8f5.zip
StdLib/Include: Minor changes in preparation for Interactive I/O (TTY) functionality.
StdLib/Include/ stdlib.h Update MB_CUR_MAX to 3, the max. size of a MBCS character. Improve comments for wcstombs() Declare implementation-specific MBCS utility functions: OneWcToMcLen() Determine the number of bytes needed to represent a Wide character as a MBCS character. EstimateWtoM() Determine the number of bytes needed to represent a Wide character string as a MBCS string. CountMbcsChars() Determine the number of characters in a MBCS string. wchar.h Improve comments. StdLib/Include/sys/ fcntl.h Define new Open flags. Remove obsolete and commented-out lines. termios.h Add Intel Copyright notice and Open-Source License. Change c_cc index macros into enumerated values. Clean up flag definitions for visual alignment as well as UEFI relevance. Move c_ispeed and c_ospeed termios members to end for better alignment. Comment out declarations for functions not yet implemented. Add an enum defining values for the UEFI extended function keys. Contributed-under: TianoCore Contribution Agreement 1.0 Reviewed-by: erik.c.bjorge@intel.com Reviewed-by: jaben.carsey@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13741 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'StdLib')
-rw-r--r--StdLib/Include/stdlib.h64
-rw-r--r--StdLib/Include/sys/fcntl.h8
-rw-r--r--StdLib/Include/sys/termios.h390
-rw-r--r--StdLib/Include/wchar.h12
4 files changed, 254 insertions, 220 deletions
diff --git a/StdLib/Include/stdlib.h b/StdLib/Include/stdlib.h
index 1166847867..0b9dfd34b0 100644
--- a/StdLib/Include/stdlib.h
+++ b/StdLib/Include/stdlib.h
@@ -101,7 +101,7 @@
char ** __restrict endptr);
@endverbatim
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
@@ -166,8 +166,11 @@ typedef struct {
maximum number of bytes in a multibyte character for the extended character
set specified by the current locale (category LC_CTYPE), which is never
greater than MB_LEN_MAX.
+
+ Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
+ correctly formed characters will only produce 1, 2, or 3-byte UTF-8 characters.
**/
-#define MB_CUR_MAX 2
+#define MB_CUR_MAX 3
/** Maximum number of functions that can be registered by atexit.
@@ -845,7 +848,7 @@ size_t mbstowcs(wchar_t * __restrict Dest, const char * __restrict Src, size_t
@param[out] Dest Pointer to the array to receive the converted string.
@param[in] Src Pointer to the string to be converted.
- @param[in] Limit Maximum number of elements to be written to Dest.
+ @param[in] Limit Maximum number of bytes to be written to Dest.
@return If a wide character is encountered that does not correspond to a
valid multibyte character, the wcstombs function returns
@@ -855,7 +858,7 @@ size_t mbstowcs(wchar_t * __restrict Dest, const char * __restrict Src, size_t
**/
size_t wcstombs(char * __restrict Dest, const wchar_t * __restrict Src, size_t Limit);
-/* ################ Miscelaneous functions for *nix compatibility ########## */
+/* ############## Miscelaneous functions for *nix compatibility ########## */
/** The realpath() function shall derive, from the pathname pointed to by
file_name, an absolute pathname that names the same file, whose resolution
@@ -890,6 +893,59 @@ const char * getprogname(void);
**/
void setprogname(const char *progname);
+/* ############### Functions specific to this implementation ############# */
+
+/* Determine the number of bytes needed to represent a Wide character
+ as a MBCS character.
+
+ A single wide character may convert into a one, two, three, or four byte
+ narrow (MBCS or UTF-8) character. The number of MBCS bytes can be determined
+ as follows.
+
+ If WCS char < 0x00000080 One Byte
+ Else if WCS char < 0x0000D800 Two Bytes
+ Else Three Bytes
+
+ Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
+ Four-byte characters are not supported.
+
+ @param[in] InCh Wide character to test.
+
+ @retval -1 Improperly formed character
+ @retval 0 InCh is 0x0000
+ @retval >0 Number of bytes needed for the MBCS character
+*/
+int
+EFIAPI
+OneWcToMcLen(const wchar_t InCh);
+
+/* Determine the number of bytes needed to represent a Wide character string
+ as a MBCS string of given maximum length. Will optionally return the number
+ of wide characters that would be consumed.
+
+ @param[in] Src Pointer to a wide character string.
+ @param[in] Limit Maximum number of bytes the converted string may occupy.
+ @param[out] NumChar Pointer to where to store the number of wide characters, or NULL.
+
+ @return The number of bytes required to convert Src to MBCS,
+ not including the terminating NUL. If NumChar is not NULL, the number
+ of characters represented by the return value will be written to
+ where it points.
+**/
+size_t
+EFIAPI
+EstimateWtoM(const wchar_t * Src, size_t Limit, size_t *NumChar);
+
+/** Determine the number of characters in a MBCS string.
+
+ @param[in] Src The string to examine
+
+ @return The number of characters represented by the MBCS string.
+**/
+size_t
+EFIAPI
+CountMbcsChars(const char *Src);
+
__END_DECLS
#endif /* _STDLIB_H */
diff --git a/StdLib/Include/sys/fcntl.h b/StdLib/Include/sys/fcntl.h
index b91792f9f7..819461b492 100644
--- a/StdLib/Include/sys/fcntl.h
+++ b/StdLib/Include/sys/fcntl.h
@@ -2,7 +2,7 @@
This file includes the definitions for open and fcntl described by POSIX
for <fcntl.h>; it also includes related kernel definitions.
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made
available under the terms and conditions of the BSD License which
accompanies this distribution. The full text of the license may be found
@@ -72,14 +72,16 @@
#define O_TRUNC 0x00000400 ///< truncate to zero length
#define O_EXCL 0x00000800 ///< error if already exists
+#define O_DIRECTORY 0x00001000 ///< error if path is not a directory
+#define O_NOCTTY 0x00002000 ///< Don't make this the controlling TTY
+#define O_TTY_INIT 0x00004000 ///< Initialize TTY to "sane" values on open
+
/* UEFI-specific open-only flags. */
#define O_HIDDEN 0x00010000 ///< Hidden file attribute
#define O_SYSTEM 0x00020000 ///< System file attribute
#define O_ARCHIVE 0x00040000 ///< Archive file attribute
/// @}
-//#define O_DIRECT 0x00080000 /* direct I/O hint */
-
#define O_SETMASK 0x0000000F ///< Flags modifiable by F_SETFD (fcntl)
/*
diff --git a/StdLib/Include/sys/termios.h b/StdLib/Include/sys/termios.h
index b1373dea2b..13e15d2fad 100644
--- a/StdLib/Include/sys/termios.h
+++ b/StdLib/Include/sys/termios.h
@@ -1,6 +1,16 @@
-/* $NetBSD: termios.h,v 1.29 2005/12/11 12:25:21 christos Exp $ */
+/** @file
+ Macros and declarations for terminal oriented ioctls and
+ I/O discipline.
+
+ Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-/*
* Copyright (c) 1988, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
@@ -29,123 +39,95 @@
* SUCH DAMAGE.
*
* @(#)termios.h 8.3 (Berkeley) 3/28/94
- */
-
+ NetBSD: termios.h,v 1.29 2005/12/11 12:25:21 christos Exp
+**/
#ifndef _SYS_TERMIOS_H_
#define _SYS_TERMIOS_H_
#include <sys/ansi.h>
#include <sys/featuretest.h>
-/*
- * Special Control Characters
+/* Special Control Characters
*
* Index into c_cc[] character array.
- *
- * Name Subscript Enabled by
*/
-#define VEOF 0 /* ICANON */
-#define VEOL 1 /* ICANON */
-#if defined(_NETBSD_SOURCE)
-#define VEOL2 2 /* ICANON */
-#endif
-#define VERASE 3 /* ICANON */
-#if defined(_NETBSD_SOURCE)
-#define VWERASE 4 /* ICANON */
-#endif
-#define VKILL 5 /* ICANON */
-#if defined(_NETBSD_SOURCE)
-#define VREPRINT 6 /* ICANON */
-#endif
-/* 7 spare 1 */
-#define VINTR 8 /* ISIG */
-#define VQUIT 9 /* ISIG */
-#define VSUSP 10 /* ISIG */
-#if defined(_NETBSD_SOURCE)
-#define VDSUSP 11 /* ISIG */
-#endif
-#define VSTART 12 /* IXON, IXOFF */
-#define VSTOP 13 /* IXON, IXOFF */
-#if defined(_NETBSD_SOURCE)
-#define VLNEXT 14 /* IEXTEN */
-#define VDISCARD 15 /* IEXTEN */
-#endif
-#define VMIN 16 /* !ICANON */
-#define VTIME 17 /* !ICANON */
-#if defined(_NETBSD_SOURCE)
-#define VSTATUS 18 /* ICANON */
-/* 19 spare 2 */
-#endif
-#define NCCS 20
+typedef enum {
+/* Name Enabled by */
+ VTABLEN, /* OXTABS - Length between TAB stops. */
+ VEOF, /* ICANON */
+ VEOL, /* ICANON */
+ VERASE, /* ICANON */
+ VKILL, /* ICANON */
+ VINTR, /* ISIG */
+ VQUIT, /* ISIG */
+ VMIN, /* !ICANON */
+ VTIME, /* !ICANON */
+
+ /* Extensions from BSD and POSIX -- Not yet implemented for UEFI */
+ VWERASE, /* IEXTEN, ICANON -- Erase the WORD to the left of the cursor */
+ VREPRINT, /* IEXTEN, ICANON -- Re-draw the current line (input buffer) */
+ VLNEXT, /* IEXTEN, ICANON -- Input the next character literally */
+ VDISCARD, /* IEXTEN -- Toggle. Discards output display until toggled. */
+
+ /* NCCS must always be the last member of this enum. */
+ NCCS /* Number of control characters in c_cc[] */
+} CCC_INDEX;
#define _POSIX_VDISABLE ((unsigned char)'\377')
-#if defined(_NETBSD_SOURCE)
#define CCEQ(val, c) (c == val ? val != _POSIX_VDISABLE : 0)
-#endif
/*
* Input flags - software input processing
- */
-#define IGNBRK 0x00000001 /* ignore BREAK condition */
-#define BRKINT 0x00000002 /* map BREAK to SIGINTR */
-#define IGNPAR 0x00000004 /* ignore (discard) parity errors */
-#define PARMRK 0x00000008 /* mark parity and framing errors */
-#define INPCK 0x00000010 /* enable checking of parity errors */
-#define ISTRIP 0x00000020 /* strip 8th bit off chars */
-#define INLCR 0x00000040 /* map NL into CR */
-#define IGNCR 0x00000080 /* ignore CR */
-#define ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */
-#define IXON 0x00000200 /* enable output flow control */
-#define IXOFF 0x00000400 /* enable input flow control */
-#if defined(_NETBSD_SOURCE)
-#define IXANY 0x00000800 /* any char will restart after stop */
-#endif
-#if defined(_NETBSD_SOURCE)
-#define IMAXBEL 0x00002000 /* ring bell on input queue full */
-#endif
+ c_iflag
+*/
+#define INLCR 0x0001 /* map NL into CR */
+#define IGNCR 0x0002 /* ignore CR */
+#define ICRNL 0x0004 /* map CR to NL (ala CRMOD) */
+#define IGNSPEC 0x0008 /* Ignore function, control, and other non-printing special keys. */
+#ifdef HAVE_DA_SERIAL
+ #define ISTRIP 0x0010 /* strip 8th bit off chars */
+ #define IGNBRK 0x0020 /* ignore BREAK condition */
+ #define BRKINT 0x0040 /* map BREAK to SIGINTR */
+ #define IRESRV1 0x0080
+ #define IGNPAR 0x0100 /* ignore (discard) parity errors */
+ #define PARMRK 0x0200 /* mark parity and framing errors */
+ #define INPCK 0x0400 /* enable checking of parity errors */
+ #define IXON 0x0800 /* enable output flow control */
+ #define IXOFF 0x1000 /* enable input flow control */
+ #define IXANY 0x2000 /* any char will restart after stop */
+#endif /* HAVE_DA_SERIAL */
/*
* Output flags - software output processing
+ c_oflag
*/
-#define OPOST 0x00000001 /* enable following output processing */
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#define ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */
-#endif
-#if defined(_NETBSD_SOURCE)
-#define OXTABS 0x00000004 /* expand tabs to spaces */
-#define ONOEOT 0x00000008 /* discard EOT's (^D) on output */
-#endif
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#define OCRNL 0x00000010 /* map CR to NL */
-#define ONOCR 0x00000020 /* discard CR's when on column 0 */
-#define ONLRET 0x00000040 /* move to column 0 on CR */
-#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
+#define OPOST 0x0001 /* enable following output processing */
+#define ONLCR 0x0002 /* map NL to CR-NL (ala CRMOD) */
+#define OXTABS 0x0004 /* expand tabs to spaces */
+#define ONOEOT 0x0008 /* discard EOT's (^D) on output */
+#define OCRNL 0x0010 /* map CR to NL */
+#define ONOCR 0x0020 /* discard CR's when on column 0 */
+#define ONLRET 0x0040 /* move to column 0 on CR */
+#define OCTRL 0x0080 /* Map control characters to the sequence ^C */
/*
* Control flags - hardware control of terminal
+ c_cflag
*/
-#if defined(_NETBSD_SOURCE)
-#define CIGNORE 0x00000001 /* ignore control flags */
-#endif
-#define CSIZE 0x00000300 /* character size mask */
-#define CS5 0x00000000 /* 5 bits (pseudo) */
-#define CS6 0x00000100 /* 6 bits */
-#define CS7 0x00000200 /* 7 bits */
-#define CS8 0x00000300 /* 8 bits */
-#define CSTOPB 0x00000400 /* send 2 stop bits */
-#define CREAD 0x00000800 /* enable receiver */
-#define PARENB 0x00001000 /* parity enable */
-#define PARODD 0x00002000 /* odd parity, else even */
-#define HUPCL 0x00004000 /* hang up on last close */
-#define CLOCAL 0x00008000 /* ignore modem status lines */
-#if defined(_NETBSD_SOURCE)
-#define CRTSCTS 0x00010000 /* RTS/CTS full-duplex flow control */
-#define CRTS_IFLOW CRTSCTS /* XXX compat */
-#define CCTS_OFLOW CRTSCTS /* XXX compat */
-#define CDTRCTS 0x00020000 /* DTR/CTS full-duplex flow control */
-#define MDMBUF 0x00100000 /* DTR/DCD hardware flow control */
-#define CHWFLOW (MDMBUF|CRTSCTS|CDTRCTS) /* all types of hw flow control */
+#ifdef HAVE_DA_SERIAL
+ #define CIGNORE 0x0001 /* ignore control flags */
+ #define CSIZE 0x0300 /* character size mask */
+ #define CS5 0x0000 /* 5 bits (pseudo) */
+ #define CS6 0x0100 /* 6 bits */
+ #define CS7 0x0200 /* 7 bits */
+ #define CS8 0x0300 /* 8 bits */
+ #define CSTOPB 0x0400 /* send 2 stop bits, else 1 */
+ #define CREAD 0x0800 /* enable receiver */
+ #define PARENB 0x1000 /* parity enable */
+ #define PARODD 0x2000 /* odd parity, else even */
+ #define HUPCL 0x4000 /* hang up on last close */
+ #define CLOCAL 0x8000 /* ignore modem status lines */
#endif
@@ -156,149 +138,137 @@
* the letter "I" and look like they belong in the
* input flag.
*/
+#define ECHO 0x0001 /* enable echoing */
+#define ECHOE 0x0002 /* visually erase chars */
+#define ECHOK 0x0004 /* echo NL after line kill */
+#define ECHONL 0x0008 /* echo NL even if ECHO is off */
+#define ISIG 0x0010 /* enable signals INTR, QUIT, [D]SUSP */
+#define ICANON 0x0020 /* canonicalize input lines */
+#define IEXTEN 0x0040 /* enable Extensions */
+#define SKIP_1 0x0100 /* Currently unused */
+#define TOSTOP 0x0200 /* stop background jobs on output */
+#define PENDIN 0x0400 /* re-echo input buffer at next read */
+#define NOFLSH 0x0800 /* don't flush output on signal */
+#define FLUSHO 0x1000 /* output being flushed (state) */
-#if defined(_NETBSD_SOURCE)
-#define ECHOKE 0x00000001 /* visual erase for line kill */
-#endif
-#define ECHOE 0x00000002 /* visually erase chars */
-#define ECHOK 0x00000004 /* echo NL after line kill */
-#define ECHO 0x00000008 /* enable echoing */
-#define ECHONL 0x00000010 /* echo NL even if ECHO is off */
-#if defined(_NETBSD_SOURCE)
-#define ECHOPRT 0x00000020 /* visual erase mode for hardcopy */
-#define ECHOCTL 0x00000040 /* echo control chars as ^(Char) */
-#endif /* defined(_NETBSD_SOURCE) */
-#define ISIG 0x00000080 /* enable signals INTR, QUIT, [D]SUSP */
-#define ICANON 0x00000100 /* canonicalize input lines */
-#if defined(_NETBSD_SOURCE)
-#define ALTWERASE 0x00000200 /* use alternate WERASE algorithm */
-#endif /* defined(_NETBSD_SOURCE) */
-#define IEXTEN 0x00000400 /* enable DISCARD and LNEXT */
-#if defined(_NETBSD_SOURCE)
-#define EXTPROC 0x00000800 /* external processing */
-#endif /* defined(_NETBSD_SOURCE) */
-#define TOSTOP 0x00400000 /* stop background jobs on output */
-#if defined(_NETBSD_SOURCE)
-#define FLUSHO 0x00800000 /* output being flushed (state) */
-#define NOKERNINFO 0x02000000 /* no kernel output from VSTATUS */
-#define PENDIN 0x20000000 /* re-echo input buffer at next read */
-#endif /* defined(_NETBSD_SOURCE) */
-#define NOFLSH 0x80000000 /* don't flush output on signal */
-
-typedef unsigned int tcflag_t;
-typedef unsigned char cc_t;
-typedef unsigned int speed_t;
+typedef INT8 cc_t;
+typedef UINT16 tcflag_t;
+typedef UINT32 speed_t;
struct termios {
- tcflag_t c_iflag; /* input flags */
- tcflag_t c_oflag; /* output flags */
- tcflag_t c_cflag; /* control flags */
- tcflag_t c_lflag; /* local flags */
- cc_t c_cc[NCCS]; /* control chars */
- int c_ispeed; /* input speed */
- int c_ospeed; /* output speed */
+ INT32 c_ispeed; /* input speed - Use a signed type instead of speed_t */
+ INT32 c_ospeed; /* output speed - to ease integer promotion when used. */
+ tcflag_t c_iflag; /* input flags */
+ tcflag_t c_oflag; /* output flags */
+ tcflag_t c_cflag; /* control flags */
+ tcflag_t c_lflag; /* local flags */
+ cc_t c_cc[NCCS]; /* control chars */
};
/*
* Commands passed to tcsetattr() for setting the termios structure.
*/
-#define TCSANOW 0 /* make change immediate */
-#define TCSADRAIN 1 /* drain output, then change */
-#define TCSAFLUSH 2 /* drain output, flush input */
-#if defined(_NETBSD_SOURCE)
-#define TCSASOFT 0x10 /* flag - don't alter h.w. state */
-#endif
+#define TCSANOW 0 /* make change immediate */
+#define TCSADRAIN 1 /* drain output, then change */
+#define TCSAFLUSH 2 /* drain output, flush input */
+#define TCSASOFT 0x10 /* flag - don't alter h.w. state */
/*
* Standard speeds
*/
-#define B0 0
-#define B50 50
-#define B75 75
-#define B110 110
-#define B134 134
-#define B150 150
-#define B200 200
-#define B300 300
-#define B600 600
-#define B1200 1200
-#define B1800 1800
-#define B2400 2400
-#define B4800 4800
-#define B9600 9600
-#define B19200 19200
-#define B38400 38400
-#if defined(_NETBSD_SOURCE)
-#define B7200 7200
-#define B14400 14400
-#define B28800 28800
-#define B57600 57600
-#define B76800 76800
-#define B115200 115200
-#define B230400 230400
-#define B460800 460800
-#define B921600 921600
-#define EXTA 19200
-#define EXTB 38400
-#endif /* defined(_NETBSD_SOURCE) */
+#define B0 0
+#define B50 50
+#define B75 75
+#define B110 110
+#define B134 134
+#define B150 150
+#define B200 200
+#define B300 300
+#define B600 600
+#define B1200 1200
+#define B1800 1800
+#define B2400 2400
+#define B4800 4800
+#define B9600 9600
+#define B19200 19200
+#define B38400 38400
-#ifndef _KERNEL
+// Extended speed definitions
+#define B7200 7200
+#define B14400 14400
+#define B28800 28800
+#define B57600 57600
+#define B76800 76800
+#define B115200 115200
+#define B230400 230400
+#define B460800 460800
+#define B921600 921600
#define TCIFLUSH 1
#define TCOFLUSH 2
#define TCIOFLUSH 3
#define TCOOFF 1
-#define TCOON 2
+#define TCOON 2
#define TCIOFF 3
-#define TCION 4
+#define TCION 4
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#ifndef pid_t
-typedef __pid_t pid_t;
-#define pid_t __pid_t
-#endif
-#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
#include <sys/EfiCdefs.h>
__BEGIN_DECLS
-speed_t cfgetispeed(const struct termios *);
-speed_t cfgetospeed(const struct termios *);
-int cfsetispeed(struct termios *, speed_t);
-int cfsetospeed(struct termios *, speed_t);
-int tcgetattr(int, struct termios *);
-int tcsetattr(int, int, const struct termios *);
-int tcdrain(int);
-int tcflow(int, int);
-int tcflush(int, int);
-int tcsendbreak(int, int);
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-pid_t tcgetsid(int);
-#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
+speed_t cfgetispeed (const struct termios *);
+speed_t cfgetospeed (const struct termios *);
+int cfsetispeed (struct termios *, speed_t);
+int cfsetospeed (struct termios *, speed_t);
+int tcgetattr (int, struct termios *);
+int tcsetattr (int, int, const struct termios *);
+int tcdrain (int);
+int tcflow (int, int);
+int tcflush (int, int);
+//int tcsendbreak (int, int);
+//pid_t tcgetsid (int);
-#if defined(_NETBSD_SOURCE)
-void cfmakeraw(struct termios *);
-int cfsetspeed(struct termios *, speed_t);
-#endif /* defined(_NETBSD_SOURCE) */
+//void cfmakeraw (struct termios *);
+//int cfsetspeed (struct termios *, speed_t);
__END_DECLS
-#endif /* !_KERNEL */
+/* Input values for UEFI Keyboard Scan Codes.
-#if defined(_NETBSD_SOURCE)
+ The UEFI Keyboard Scan Codes are mapped into the upper range of the Unicode
+ Private Use Area so that the characters can be inserted into the input stream
+ and treated the same as any other character.
-/*
- * Include tty ioctl's that aren't just for backwards compatibility
- * with the old tty driver. These ioctl definitions were previously
- * in <sys/ioctl.h>.
- */
-//#include <sys/ttycom.h>
-#endif
+ These values are only used for input. If these codes are output to the
+ console, or another interactive I/O device, the behavior will depend upon
+ the current locale and UEFI character set loaded.
+*/
+typedef enum {
+ TtySpecKeyMin = 0xF7F0,
+ /* This area is reserved for use by internal I/O software.
+ At least 4 values must exist between TtySpecKeyMin and TtyFunKeyMin.
+ */
+ TtyFunKeyMin = 0xF7FA,
+ TtyKeyEject = 0xF7FA,
+ TtyRecovery, TtyToggleDisplay, TtyHibernate,
+ TtySuspend, TtyBrightnessDown, TtyBrightnessUp,
+ TtyVolumeDown = 0xF87F,
+ TtyVolumeUp, TtyMute,
+ TtyF24 = 0xF88D,
+ TtyF23, TtyF22, TtyF21, TtyF20,
+ TtyF19, TtyF18, TtyF17, TtyF16,
+ TtyF15, TtyF14, TtyF13,
+ TtyEscape = 0xF8E9,
+ TtyF12, TtyF11, TtyF10, TtyF9,
+ TtyF8, TtyF7, TtyF6, TtyF5,
+ TtyF4, TtyF3, TtyF2, TtyF1,
+ TtyPageDown, TtyPageUp, TtyDelete, TtyInsert,
+ TtyEnd, TtyHome, TtyLeftArrow, TtyRightArrow,
+ TtyDownArrow,
+ TtyUpArrow = 0xF8FF,
+ TtyFunKeyMax = 0xF900
+} TtyFunKey;
-/*
- * END OF PROTECTED INCLUDE.
- */
-#endif /* !_SYS_TERMIOS_H_ */
+// Non-UEFI character definitions
+#define CHAR_EOT 0x0004 /* End of Text (EOT) character */
-#if defined(_NETBSD_SOURCE)
-//#include <sys/ttydefaults.h>
-#endif
+#endif /* !_SYS_TERMIOS_H_ */
diff --git a/StdLib/Include/wchar.h b/StdLib/Include/wchar.h
index b53ee24939..2c9ec6e5e7 100644
--- a/StdLib/Include/wchar.h
+++ b/StdLib/Include/wchar.h
@@ -1415,10 +1415,16 @@ int mbsinit(const mbstate_t *ps);
where internal is the mbstate_t object for the mbrlen function, except that
the expression designated by ps is evaluated only once.
- @return The mbrlen function returns a value between zero and n,
- inclusive, (size_t)(-2), or (size_t)(-1).
+ @param[in] s Pointer to a multibyte character sequence.
+ @param[in] n Maximum number of bytes to examine.
+ @param[in] pS Pointer to the conversion state object.
+
+ @retval 0 The next n or fewer characters complete a NUL.
+ @retval 1..n The number of bytes that complete the multibyte character.
+ @retval -2 The next n bytes contribute to an incomplete (but potentially valid) multibyte character.
+ @retval -1 An encoding error occurred.
**/
-size_t mbrlen(const char * __restrict S, size_t n, mbstate_t * __restrict ps);
+size_t mbrlen(const char * __restrict S, size_t n, mbstate_t * __restrict pS);
/** Restartable Multibyte to Wide character conversion.
If S is a null pointer, the mbrtowc function is equivalent to the call:<BR>