1/** @file
2  Constants and declarations for the Interactive IO library.
3
4  Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
5  This program and the accompanying materials are licensed and made available
6  under the terms and conditions of the BSD License which accompanies this
7  distribution.  The full text of the license may be found at
8  http://opensource.org/licenses/bsd-license.php.
9
10  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12**/
13#ifndef _INTERACTIVE_IO_H
14#define _INTERACTIVE_IO_H
15
16#include  <sys/EfiSysCall.h>
17#include  <sys/termios.h>
18#include  <Containers/Fifo.h>
19#include  <kfile.h>
20
21__BEGIN_DECLS
22
23typedef struct _IIO_Instance  cIIO;
24
25cIIO * EFIAPI New_cIIO(void);   // Creates a new cIIO structure
26
27/*  Types of Member functions of the TTY I/O "class". */
28typedef void    (EFIAPI *cIIO_Delete)    (cIIO *This);
29
30typedef ssize_t (EFIAPI *cIIO_Read)      (struct __filedes *filp, size_t BufferSize, VOID *Buffer);
31
32typedef ssize_t (EFIAPI *cIIO_Write)     (struct __filedes *filp, const char *buf, ssize_t n);
33
34typedef ssize_t (EFIAPI *cIIO_Echo)      (struct __filedes *filp, wchar_t EChar, BOOLEAN EchoIsOK);
35
36/** Structure defining an instance of the Interactive I/O "class".  **/
37struct _IIO_Instance {
38  /* ######## Public Functions ######## */
39  cIIO_Delete      Delete;
40  cIIO_Read        Read;
41  cIIO_Write       Write;
42  cIIO_Echo        Echo;
43
44  /* ######## PRIVATE Data ######## */
45
46  // Wide input buffer -- stdin
47  cFIFO          *InBuf;
48
49  // Wide output buffer -- stdout
50  cFIFO          *OutBuf;
51
52  // Attributes for characters in the output buffer
53  UINT8          *AttrBuf;
54
55  // Wide output buffer -- stderr
56  cFIFO          *ErrBuf;
57
58  // Character conversion states for the buffers
59  mbstate_t       OutState;
60  mbstate_t       ErrState;
61
62  //  Cursor position at beginning of operation
63  //  and at each character thereafter.
64  CURSOR_XY       InitialXY;
65  CURSOR_XY       CurrentXY;
66
67  UINTN           MaxColumn;    // Width of the output device
68  UINTN           MaxRow;       // Height of the output device
69
70  // termios structure
71  struct termios  Termio;
72};
73
74// Helper Functions
75ssize_t IIO_CanonRead     (struct __filedes *filp);
76ssize_t IIO_NonCanonRead  (struct __filedes *filp);
77ssize_t IIO_WriteOne      (struct __filedes *filp, cFIFO *Buf, wchar_t InCh);
78ssize_t IIO_EchoOne       (struct __filedes *filp, wchar_t InCh, BOOLEAN EchoIsOK);
79
80__END_DECLS
81#endif  /* _INTERACTIVE_IO_H */
82