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