/** @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 */