Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen A Chen <chen.a.chen@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Ruiyu Ni <Ruiyu.ni@intel.com>
		
			
				
	
	
		
			274 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|     Defines BufferImage - the view of the file that is visible at any point, 
 | |
|     as well as the event handlers for editing the file
 | |
|   
 | |
|   Copyright (c) 2005 - 2011, 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 _LIB_BUFFER_IMAGE_H_
 | |
| #define _LIB_BUFFER_IMAGE_H_
 | |
| 
 | |
| #include "HexEditor.h"
 | |
| 
 | |
| /**
 | |
|   Initialization function for HBufferImage
 | |
| 
 | |
|   @retval EFI_SUCCESS       The operation was successful.
 | |
|   @retval EFI_LOAD_ERROR    A load error occured.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageInit (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Cleanup function for HBufferImage
 | |
| 
 | |
|   @retval EFI_SUCCESS  The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageCleanup (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Refresh function for HBufferImage.
 | |
| 
 | |
|   @retval EFI_SUCCESS     The operation was successful.
 | |
|   @retval EFI_LOAD_ERROR  A Load error occured.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageRefresh (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Dispatch input to different handler
 | |
| 
 | |
|   @param[in] Key    The input key:
 | |
|                      the keys can be:
 | |
|                        ASCII KEY
 | |
|                         Backspace/Delete
 | |
|                         Direction key: up/down/left/right/pgup/pgdn
 | |
|                         Home/End
 | |
|                         INS
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation was successful.
 | |
|   @retval EFI_LOAD_ERROR        A load error occured.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A Memory allocation failed.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageHandleInput (
 | |
|   IN  EFI_INPUT_KEY *Key
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Backup function for HBufferImage. Only a few fields need to be backup. 
 | |
|   This is for making the file buffer refresh as few as possible.
 | |
| 
 | |
|   @retval EFI_SUCCESS  The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageBackup (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read an image into a buffer friom a source.
 | |
| 
 | |
|   @param[in] FileName     Pointer to the file name.  OPTIONAL and ignored if not FileTypeFileBuffer.
 | |
|   @param[in] DiskName     Pointer to the disk name.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] DiskOffset   Offset into the disk.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] DiskSize     Size of the disk buffer.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] MemOffset    Offset into the Memory.  OPTIONAL and ignored if not FileTypeMemBuffer.
 | |
|   @param[in] MemSize      Size of the Memory buffer.  OPTIONAL and ignored if not FileTypeMemBuffer.
 | |
|   @param[in] BufferType   The type of buffer to save.  IGNORED.
 | |
|   @param[in] Recover      TRUE for recovermode, FALSE otherwise.
 | |
| 
 | |
|   @return EFI_SUCCESS     The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageRead (
 | |
|   IN CONST CHAR16                   *FileName,
 | |
|   IN CONST CHAR16                   *DiskName,
 | |
|   IN UINTN                          DiskOffset,
 | |
|   IN UINTN                          DiskSize,
 | |
|   IN UINTN                          MemOffset,
 | |
|   IN UINTN                          MemSize,
 | |
|   IN EDIT_FILE_TYPE                 BufferType,
 | |
|   IN BOOLEAN                        Recover
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Save the current image.
 | |
| 
 | |
|   @param[in] FileName     Pointer to the file name.  OPTIONAL and ignored if not FileTypeFileBuffer.
 | |
|   @param[in] DiskName     Pointer to the disk name.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] DiskOffset   Offset into the disk.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] DiskSize     Size of the disk buffer.  OPTIONAL and ignored if not FileTypeDiskBuffer.
 | |
|   @param[in] MemOffset    Offset into the Memory.  OPTIONAL and ignored if not FileTypeMemBuffer.
 | |
|   @param[in] MemSize      Size of the Memory buffer.  OPTIONAL and ignored if not FileTypeMemBuffer.
 | |
|   @param[in] BufferType   The type of buffer to save.  IGNORED.
 | |
| 
 | |
|   @return EFI_SUCCESS     The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageSave (
 | |
|   IN CHAR16                         *FileName,
 | |
|   IN CHAR16                         *DiskName,
 | |
|   IN UINTN                          DiskOffset,
 | |
|   IN UINTN                          DiskSize,
 | |
|   IN UINTN                          MemOffset,
 | |
|   IN UINTN                          MemSize,
 | |
|   IN EDIT_FILE_TYPE                 BufferType
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   According to cursor's file position, adjust screen display.
 | |
| 
 | |
|   @param[in] NewFilePosRow    Row of file position ( start from 1 ).
 | |
|   @param[in] NewFilePosCol    Column of file position ( start from 1 ).
 | |
|   @param[in] HighBits         Cursor will on high4 bits or low4 bits.
 | |
| **/
 | |
| VOID
 | |
| HBufferImageMovePosition (
 | |
|   IN UINTN    NewFilePosRow,
 | |
|   IN UINTN    NewFilePosCol,
 | |
|   IN BOOLEAN  HighBits
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Create a new line and append it to the line list.
 | |
|     Fields affected:
 | |
|     NumLines
 | |
|     Lines 
 | |
| 
 | |
|   @retval NULL    create line failed.
 | |
|   @return         the line created.
 | |
| 
 | |
| **/
 | |
| HEFI_EDITOR_LINE  *
 | |
| HBufferImageCreateLine (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Free the current image.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageFree (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Delete character from buffer.
 | |
|   
 | |
|   @param[in] Pos      Position, Pos starting from 0.
 | |
|   @param[in] Count    The Count of characters to delete.
 | |
|   @param[out] DeleteBuffer    The DeleteBuffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS Success 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageDeleteCharacterFromBuffer (
 | |
|   IN  UINTN         Pos,
 | |
|   IN  UINTN         Count,
 | |
|   OUT UINT8         *DeleteBuffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Add character to buffer, add before pos.
 | |
| 
 | |
|   @param[in] Pos        Position, Pos starting from 0.
 | |
|   @param[in] Count      Count of characters to add.
 | |
|   @param[in] AddBuffer  Add buffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS   Success.  
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageAddCharacterToBuffer (
 | |
|   IN  UINTN          Pos,
 | |
|   IN  UINTN          Count,
 | |
|   IN  UINT8          *AddBuffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Change the raw buffer to a list of lines for the UI.
 | |
|   
 | |
|   @param[in] Buffer   The pointer to the buffer to fill.
 | |
|   @param[in] Bytes    The size of the buffer in bytes.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation was successful.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageBufferToList (
 | |
|   IN VOID   *Buffer,
 | |
|   IN UINTN  Bytes
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Change the list of lines from the UI to a raw buffer.
 | |
|   
 | |
|   @param[in] Buffer   The pointer to the buffer to fill.
 | |
|   @param[in] Bytes    The size of the buffer in bytes.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The operation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| HBufferImageListToBuffer (
 | |
|   IN VOID   *Buffer,
 | |
|   IN UINTN  Bytes
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Move the mouse in the image buffer.
 | |
| 
 | |
|   @param[in] TextX    The x-coordinate.
 | |
|   @param[in] TextY    The y-coordinate.
 | |
| **/
 | |
| VOID
 | |
| HBufferImageAdjustMousePosition (
 | |
|   IN INT32 TextX,
 | |
|   IN INT32 TextY
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to decide if a column number is stored in the high bits.
 | |
| 
 | |
|   @param[in] Column     The column to examine.
 | |
|   @param[out] FCol      The actual column number.
 | |
| 
 | |
|   @retval TRUE      The actual column was in high bits and is now in FCol.
 | |
|   @retval FALSE     There was not a column number in the high bits.
 | |
| **/
 | |
| BOOLEAN
 | |
| HBufferImageIsAtHighBits (
 | |
|   IN  UINTN Column,
 | |
|   OUT UINTN *FCol
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the size of the open buffer.
 | |
| 
 | |
|   @retval The size in bytes.
 | |
| **/
 | |
| UINTN
 | |
| HBufferImageGetTotalSize (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| #endif
 |