/** @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 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #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