• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2     Defines BufferImage - the view of the file that is visible at any point,
3     as well as the event handlers for editing the file
4 
5   Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR>
6   This program and the accompanying materials
7   are licensed and made available under the terms and conditions of the BSD License
8   which accompanies this distribution.  The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.php
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef _LIB_BUFFER_IMAGE_H_
17 #define _LIB_BUFFER_IMAGE_H_
18 
19 #include "HexEditor.h"
20 
21 /**
22   Initialization function for HBufferImage
23 
24   @retval EFI_SUCCESS       The operation was successful.
25   @retval EFI_LOAD_ERROR    A load error occured.
26 **/
27 EFI_STATUS
28 HBufferImageInit (
29   VOID
30   );
31 
32 /**
33   Cleanup function for HBufferImage
34 
35   @retval EFI_SUCCESS  The operation was successful.
36 **/
37 EFI_STATUS
38 HBufferImageCleanup (
39   VOID
40   );
41 
42 /**
43   Refresh function for HBufferImage.
44 
45   @retval EFI_SUCCESS     The operation was successful.
46   @retval EFI_LOAD_ERROR  A Load error occured.
47 
48 **/
49 EFI_STATUS
50 HBufferImageRefresh (
51   VOID
52   );
53 
54 /**
55   Dispatch input to different handler
56 
57   @param[in] Key    The input key:
58                      the keys can be:
59                        ASCII KEY
60                         Backspace/Delete
61                         Direction key: up/down/left/right/pgup/pgdn
62                         Home/End
63                         INS
64 
65   @retval EFI_SUCCESS           The operation was successful.
66   @retval EFI_LOAD_ERROR        A load error occured.
67   @retval EFI_OUT_OF_RESOURCES  A Memory allocation failed.
68 **/
69 EFI_STATUS
70 HBufferImageHandleInput (
71   IN  EFI_INPUT_KEY *Key
72   );
73 
74 /**
75   Backup function for HBufferImage. Only a few fields need to be backup.
76   This is for making the file buffer refresh as few as possible.
77 
78   @retval EFI_SUCCESS  The operation was successful.
79 **/
80 EFI_STATUS
81 HBufferImageBackup (
82   VOID
83   );
84 
85 /**
86   Read an image into a buffer friom a source.
87 
88   @param[in] FileName     Pointer to the file name.  OPTIONAL and ignored if not FileTypeFileBuffer.
89   @param[in] DiskName     Pointer to the disk name.  OPTIONAL and ignored if not FileTypeDiskBuffer.
90   @param[in] DiskOffset   Offset into the disk.  OPTIONAL and ignored if not FileTypeDiskBuffer.
91   @param[in] DiskSize     Size of the disk buffer.  OPTIONAL and ignored if not FileTypeDiskBuffer.
92   @param[in] MemOffset    Offset into the Memory.  OPTIONAL and ignored if not FileTypeMemBuffer.
93   @param[in] MemSize      Size of the Memory buffer.  OPTIONAL and ignored if not FileTypeMemBuffer.
94   @param[in] BufferType   The type of buffer to save.  IGNORED.
95   @param[in] Recover      TRUE for recovermode, FALSE otherwise.
96 
97   @return EFI_SUCCESS     The operation was successful.
98 **/
99 EFI_STATUS
100 HBufferImageRead (
101   IN CONST CHAR16                   *FileName,
102   IN CONST CHAR16                   *DiskName,
103   IN UINTN                          DiskOffset,
104   IN UINTN                          DiskSize,
105   IN UINTN                          MemOffset,
106   IN UINTN                          MemSize,
107   IN EDIT_FILE_TYPE                 BufferType,
108   IN BOOLEAN                        Recover
109   );
110 
111 /**
112   Save the current image.
113 
114   @param[in] FileName     Pointer to the file name.  OPTIONAL and ignored if not FileTypeFileBuffer.
115   @param[in] DiskName     Pointer to the disk name.  OPTIONAL and ignored if not FileTypeDiskBuffer.
116   @param[in] DiskOffset   Offset into the disk.  OPTIONAL and ignored if not FileTypeDiskBuffer.
117   @param[in] DiskSize     Size of the disk buffer.  OPTIONAL and ignored if not FileTypeDiskBuffer.
118   @param[in] MemOffset    Offset into the Memory.  OPTIONAL and ignored if not FileTypeMemBuffer.
119   @param[in] MemSize      Size of the Memory buffer.  OPTIONAL and ignored if not FileTypeMemBuffer.
120   @param[in] BufferType   The type of buffer to save.  IGNORED.
121 
122   @return EFI_SUCCESS     The operation was successful.
123 **/
124 EFI_STATUS
125 HBufferImageSave (
126   IN CHAR16                         *FileName,
127   IN CHAR16                         *DiskName,
128   IN UINTN                          DiskOffset,
129   IN UINTN                          DiskSize,
130   IN UINTN                          MemOffset,
131   IN UINTN                          MemSize,
132   IN EDIT_FILE_TYPE                 BufferType
133   );
134 
135 /**
136   According to cursor's file position, adjust screen display.
137 
138   @param[in] NewFilePosRow    Row of file position ( start from 1 ).
139   @param[in] NewFilePosCol    Column of file position ( start from 1 ).
140   @param[in] HighBits         Cursor will on high4 bits or low4 bits.
141 **/
142 VOID
143 HBufferImageMovePosition (
144   IN UINTN    NewFilePosRow,
145   IN UINTN    NewFilePosCol,
146   IN BOOLEAN  HighBits
147   );
148 
149 
150 /**
151   Create a new line and append it to the line list.
152     Fields affected:
153     NumLines
154     Lines
155 
156   @retval NULL    create line failed.
157   @return         the line created.
158 
159 **/
160 HEFI_EDITOR_LINE  *
161 HBufferImageCreateLine (
162   VOID
163   );
164 
165 /**
166   Free the current image.
167 
168   @retval EFI_SUCCESS   The operation was successful.
169 **/
170 EFI_STATUS
171 HBufferImageFree (
172   VOID
173   );
174 
175 /**
176   Delete character from buffer.
177 
178   @param[in] Pos      Position, Pos starting from 0.
179   @param[in] Count    The Count of characters to delete.
180   @param[out] DeleteBuffer    The DeleteBuffer.
181 
182   @retval EFI_SUCCESS Success
183 **/
184 EFI_STATUS
185 HBufferImageDeleteCharacterFromBuffer (
186   IN  UINTN         Pos,
187   IN  UINTN         Count,
188   OUT UINT8         *DeleteBuffer
189   );
190 
191 /**
192   Add character to buffer, add before pos.
193 
194   @param[in] Pos        Position, Pos starting from 0.
195   @param[in] Count      Count of characters to add.
196   @param[in] AddBuffer  Add buffer.
197 
198   @retval EFI_SUCCESS   Success.
199 **/
200 EFI_STATUS
201 HBufferImageAddCharacterToBuffer (
202   IN  UINTN          Pos,
203   IN  UINTN          Count,
204   IN  UINT8          *AddBuffer
205   );
206 
207 /**
208   Change the raw buffer to a list of lines for the UI.
209 
210   @param[in] Buffer   The pointer to the buffer to fill.
211   @param[in] Bytes    The size of the buffer in bytes.
212 
213   @retval EFI_SUCCESS           The operation was successful.
214   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
215 **/
216 EFI_STATUS
217 HBufferImageBufferToList (
218   IN VOID   *Buffer,
219   IN UINTN  Bytes
220   );
221 
222 /**
223   Change the list of lines from the UI to a raw buffer.
224 
225   @param[in] Buffer   The pointer to the buffer to fill.
226   @param[in] Bytes    The size of the buffer in bytes.
227 
228   @retval EFI_SUCCESS   The operation was successful.
229 **/
230 EFI_STATUS
231 HBufferImageListToBuffer (
232   IN VOID   *Buffer,
233   IN UINTN  Bytes
234   );
235 
236 /**
237   Move the mouse in the image buffer.
238 
239   @param[in] TextX    The x-coordinate.
240   @param[in] TextY    The y-coordinate.
241 **/
242 VOID
243 HBufferImageAdjustMousePosition (
244   IN INT32 TextX,
245   IN INT32 TextY
246   );
247 
248 /**
249   Function to decide if a column number is stored in the high bits.
250 
251   @param[in] Column     The column to examine.
252   @param[out] FCol      The actual column number.
253 
254   @retval TRUE      The actual column was in high bits and is now in FCol.
255   @retval FALSE     There was not a column number in the high bits.
256 **/
257 BOOLEAN
258 HBufferImageIsAtHighBits (
259   IN  UINTN Column,
260   OUT UINTN *FCol
261   );
262 
263 /**
264   Get the size of the open buffer.
265 
266   @retval The size in bytes.
267 **/
268 UINTN
269 HBufferImageGetTotalSize (
270   VOID
271   );
272 
273 #endif
274