blob: 4eb3623cdcda59cad6f0bdb2f996b1bdbce6da99 [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/** @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 */