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 
23 typedef struct _IIO_Instance  cIIO;
24 
25 cIIO * EFIAPI New_cIIO(void);   // Creates a new cIIO structure
26 
27 /*  Types of Member functions of the TTY I/O "class". */
28 typedef void    (EFIAPI *cIIO_Delete)    (cIIO *This);
29 
30 typedef ssize_t (EFIAPI *cIIO_Read)      (struct __filedes *filp, size_t BufferSize, VOID *Buffer);
31 
32 typedef ssize_t (EFIAPI *cIIO_Write)     (struct __filedes *filp, const char *buf, ssize_t n);
33 
34 typedef 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".  **/
37 struct _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
75 ssize_t IIO_CanonRead     (struct __filedes *filp);
76 ssize_t IIO_NonCanonRead  (struct __filedes *filp);
77 ssize_t IIO_WriteOne      (struct __filedes *filp, cFIFO *Buf, wchar_t InCh);
78 ssize_t IIO_EchoOne       (struct __filedes *filp, wchar_t InCh, BOOLEAN EchoIsOK);
79 
80 __END_DECLS
81 #endif  /* _INTERACTIVE_IO_H */
82