mirror of https://github.com/acidanthera/audk.git
82 lines
2.6 KiB
C
82 lines
2.6 KiB
C
|
/** @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 */
|