StdLib: Add internal use only header for interactive I/O.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: daryl.mcdaniel@intel.com
Reviewed-by: erik.c.bjorge@intel.com
Reviewed-by: leroy.p.leahy@intel.com
Reviewed-by: lee.g.rosenbaum@intel.com
Reviewed-by: jaben.carsey@intel.com
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13988 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/StdLibPrivateInternalFiles/Include/Device/IIO.h b/StdLibPrivateInternalFiles/Include/Device/IIO.h
new file mode 100644
index 0000000..4eb3623
--- /dev/null
+++ b/StdLibPrivateInternalFiles/Include/Device/IIO.h
@@ -0,0 +1,81 @@
+/** @file
+ Constants and declarations for the Interactive IO library.
+
+ 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 which accompanies this
+ distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
+#ifndef _INTERACTIVE_IO_H
+#define _INTERACTIVE_IO_H
+
+#include <sys/EfiSysCall.h>
+#include <sys/termios.h>
+#include <Containers/Fifo.h>
+#include <kfile.h>
+
+__BEGIN_DECLS
+
+typedef struct _IIO_Instance cIIO;
+
+cIIO * EFIAPI New_cIIO(void); // Creates a new cIIO structure
+
+/* Types of Member functions of the TTY I/O "class". */
+typedef void (EFIAPI *cIIO_Delete) (cIIO *This);
+
+typedef ssize_t (EFIAPI *cIIO_Read) (struct __filedes *filp, size_t BufferSize, VOID *Buffer);
+
+typedef ssize_t (EFIAPI *cIIO_Write) (struct __filedes *filp, const char *buf, ssize_t n);
+
+typedef ssize_t (EFIAPI *cIIO_Echo) (struct __filedes *filp, wchar_t EChar, BOOLEAN EchoIsOK);
+
+/** Structure defining an instance of the Interactive I/O "class". **/
+struct _IIO_Instance {
+ /* ######## Public Functions ######## */
+ cIIO_Delete Delete;
+ cIIO_Read Read;
+ cIIO_Write Write;
+ cIIO_Echo Echo;
+
+ /* ######## PRIVATE Data ######## */
+
+ // Wide input buffer -- stdin
+ cFIFO *InBuf;
+
+ // Wide output buffer -- stdout
+ cFIFO *OutBuf;
+
+ // Attributes for characters in the output buffer
+ UINT8 *AttrBuf;
+
+ // Wide output buffer -- stderr
+ cFIFO *ErrBuf;
+
+ // Character conversion states for the buffers
+ mbstate_t OutState;
+ mbstate_t ErrState;
+
+ // Cursor position at beginning of operation
+ // and at each character thereafter.
+ CURSOR_XY InitialXY;
+ CURSOR_XY CurrentXY;
+
+ UINTN MaxColumn; // Width of the output device
+ UINTN MaxRow; // Height of the output device
+
+ // termios structure
+ struct termios Termio;
+};
+
+// Helper Functions
+ssize_t IIO_CanonRead (struct __filedes *filp);
+ssize_t IIO_NonCanonRead (struct __filedes *filp);
+ssize_t IIO_WriteOne (struct __filedes *filp, cFIFO *Buf, wchar_t InCh);
+ssize_t IIO_EchoOne (struct __filedes *filp, wchar_t InCh, BOOLEAN EchoIsOK);
+
+__END_DECLS
+#endif /* _INTERACTIVE_IO_H */