Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 lines
7.3 KiB

  1. #ifndef _EDITOR_H
  2. #define _EDITOR_H
  3. /*++
  4. Copyright (c) 1999 Intel Corporation
  5. Module Name:
  6. Editor.h
  7. Abstract:
  8. Main include file for text editor
  9. --*/
  10. #include "efi.h"
  11. #include "efilib.h"
  12. #include "shell.h"
  13. #define EDITOR_NAME L"EFI Text Editor\0"
  14. #define EDITOR_VERSION L"0.92\0"
  15. typedef
  16. EFI_STATUS
  17. (*EFI_EDITOR_INIT) (VOID);
  18. typedef
  19. EFI_STATUS
  20. (*EFI_EDITOR_CLEANUP) (VOID);
  21. typedef
  22. EFI_STATUS
  23. (*EFI_EDITOR_REFRESH) (VOID);
  24. typedef
  25. EFI_STATUS
  26. (*EFI_EDITOR_HIDE) (VOID);
  27. typedef
  28. EFI_STATUS
  29. (*EFI_EDITOR_INPUT) (
  30. VOID
  31. );
  32. typedef
  33. EFI_STATUS
  34. (*EFI_EDITOR_HANDLE_INPUT) (
  35. IN OUT EFI_INPUT_KEY *Key
  36. );
  37. typedef struct {
  38. UINTN Row;
  39. UINTN Column;
  40. } EFI_EDITOR_POSITION;
  41. typedef
  42. EFI_STATUS
  43. (*EFI_MENU_ITEM_FUNCTION) (VOID);
  44. typedef struct {
  45. CHAR16 Name[50];
  46. CHAR16 Key[3];
  47. EFI_MENU_ITEM_FUNCTION Function;
  48. } MENU_ITEMS;
  49. #define EFI_EDITOR_LINE_LIST 'eell'
  50. typedef struct _EFI_EDITOR_LINE {
  51. UINTN Signature;
  52. CHAR16 *Buffer;
  53. UINTN Size;
  54. LIST_ENTRY Link;
  55. } EFI_EDITOR_LINE;
  56. typedef struct _EFI_EDITOR_MENU_ITEM {
  57. CHAR16 *Name;
  58. CHAR16 *FunctionKey;
  59. EFI_MENU_ITEM_FUNCTION Function;
  60. } EFI_EDITOR_MENU_ITEM;
  61. typedef struct {
  62. EFI_EDITOR_MENU_ITEM *MenuItems;
  63. EFI_EDITOR_INIT Init;
  64. EFI_EDITOR_CLEANUP Cleanup;
  65. EFI_EDITOR_REFRESH Refresh;
  66. EFI_EDITOR_HIDE Hide;
  67. EFI_EDITOR_HANDLE_INPUT HandleInput;
  68. } EFI_EDITOR_MENU_BAR;
  69. typedef struct {
  70. CHAR16 *Filename;
  71. EFI_EDITOR_INIT Init;
  72. EFI_EDITOR_CLEANUP Cleanup;
  73. EFI_EDITOR_REFRESH Refresh;
  74. EFI_EDITOR_HIDE Hide;
  75. EFI_STATUS (*SetTitleString) (CHAR16*);
  76. } EFI_EDITOR_TITLE_BAR;
  77. #define INSERT_MODE_STR L"INS"
  78. #define OVERWR_MODE_STR L"OVR"
  79. typedef struct {
  80. CHAR16 *StatusString;
  81. CHAR16 *ModeString;
  82. EFI_EDITOR_POSITION Pos;
  83. EFI_EDITOR_INIT Init;
  84. EFI_EDITOR_CLEANUP Cleanup;
  85. EFI_EDITOR_REFRESH Refresh;
  86. EFI_EDITOR_HIDE Hide;
  87. EFI_STATUS (*SetStatusString) (CHAR16*);
  88. EFI_STATUS (*SetPosition) (UINTN,UINTN);
  89. EFI_STATUS (*SetMode) (BOOLEAN);
  90. } EFI_EDITOR_STATUS_BAR;
  91. typedef struct {
  92. CHAR16 *Prompt;
  93. CHAR16 *ReturnString;
  94. UINTN StringSize;
  95. EFI_EDITOR_INIT Init;
  96. EFI_EDITOR_CLEANUP Cleanup;
  97. EFI_EDITOR_REFRESH Refresh;
  98. EFI_EDITOR_HIDE Hide;
  99. EFI_STATUS (*SetPrompt) (CHAR16*);
  100. EFI_STATUS (*SetStringSize) (UINTN);
  101. } EFI_EDITOR_INPUT_BAR;
  102. typedef struct {
  103. EFI_EDITOR_POSITION DisplayPosition;
  104. EFI_EDITOR_POSITION FilePosition;
  105. EFI_EDITOR_POSITION LowVisibleRange;
  106. EFI_EDITOR_POSITION HighVisibleRange;
  107. UINTN MaxVisibleColumns;
  108. UINTN MaxVisibleRows;
  109. BOOLEAN ModeInsert;
  110. LIST_ENTRY *CurrentLine;
  111. EFI_EDITOR_INIT Init;
  112. EFI_EDITOR_CLEANUP Cleanup;
  113. EFI_EDITOR_REFRESH Refresh;
  114. EFI_EDITOR_HIDE Hide;
  115. EFI_EDITOR_HANDLE_INPUT HandleInput;
  116. EFI_STATUS (*ClearLine) (UINTN);
  117. EFI_STATUS (*SetPosition) (UINTN,UINTN);
  118. EFI_STATUS (*RestorePosition) (VOID);
  119. EFI_STATUS (*RefreshCurrentLine) (VOID);
  120. } EFI_EDITOR_FILE_BUFFER;
  121. typedef struct {
  122. UINT32 Foreground:4;
  123. UINT32 Background:4;
  124. } EFI_EDITOR_COLOR_ATTRIBUTES;
  125. typedef union {
  126. EFI_EDITOR_COLOR_ATTRIBUTES Colors;
  127. UINT8 Data;
  128. } EFI_EDITOR_COLOR_UNION;
  129. typedef struct {
  130. UINTN Columns;
  131. UINTN Rows;
  132. } EFI_EDITOR_TEXT_MODE;
  133. typedef enum {
  134. ASCII_FILE,
  135. UNICODE_FILE
  136. } EFI_EDITOR_FILE_TYPE;
  137. typedef enum {
  138. USE_LF,
  139. USE_CRLF
  140. } EE_NEWLINE_TYPE;
  141. typedef struct {
  142. CHAR16 *FileName;
  143. LIST_ENTRY *ListHead;
  144. EFI_EDITOR_LINE *Lines;
  145. UINTN NumLines;
  146. EFI_EDITOR_FILE_TYPE FileType;
  147. EE_NEWLINE_TYPE NewLineType;
  148. EFI_LOADED_IMAGE *LoadedImage;
  149. EFI_DEVICE_PATH *DevicePath;
  150. EFI_FILE_HANDLE FileHandle;
  151. EFI_FILE_IO_INTERFACE *Vol;
  152. EFI_FILE_HANDLE CurrentDir;
  153. EFI_EDITOR_CLEANUP Cleanup;
  154. EFI_STATUS (*Init) (EFI_HANDLE);
  155. EFI_STATUS (*OpenFile) (VOID);
  156. EFI_STATUS (*ReadFile) (VOID);
  157. EFI_STATUS (*CloseFile) (VOID);
  158. EFI_STATUS (*WriteFile) (VOID);
  159. EFI_STATUS (*SetFilename) (CHAR16*);
  160. BOOLEAN FileIsOpen;
  161. } EFI_EDITOR_FILE_IMAGE;
  162. typedef struct {
  163. EFI_EDITOR_TITLE_BAR *TitleBar;
  164. EFI_EDITOR_MENU_BAR *MenuBar;
  165. EFI_EDITOR_STATUS_BAR *StatusBar;
  166. EFI_EDITOR_INPUT_BAR *InputBar;
  167. EFI_EDITOR_FILE_BUFFER *FileBuffer;
  168. EFI_EDITOR_COLOR_UNION ColorAttributes;
  169. EFI_EDITOR_POSITION *ScreenSize;
  170. EFI_EDITOR_FILE_IMAGE *FileImage;
  171. BOOLEAN FileModified;
  172. EFI_EDITOR_INIT Init;
  173. EFI_EDITOR_CLEANUP Cleanup;
  174. EFI_EDITOR_INPUT KeyInput;
  175. EFI_EDITOR_HANDLE_INPUT HandleInput;
  176. EFI_EDITOR_REFRESH Refresh;
  177. } EFI_EDITOR_GLOBAL_EDITOR;
  178. #define TITLE_BAR_LOCATION 0
  179. #define STATUS_BAR_LOCATION MainEditor.ScreenSize->Row - 4
  180. #define INPUT_BAR_LOCATION STATUS_BAR_LOCATION
  181. #define MENU_BAR_LOCATION MainEditor.ScreenSize->Row - 3
  182. #define LAST_LINE_LOCATION MainEditor.ScreenSize->Row - 1
  183. #define TEXT_START_ROW TITLE_BAR_LOCATION + 1
  184. #define TEXT_START_COLUMN 0
  185. #define TEXT_END_ROW MainEditor.ScreenSize->Row - 4
  186. #define MAX_TEXT_COLUMNS MainEditor.ScreenSize->Column
  187. #define MAX_TEXT_ROWS TEXT_END_ROW - 1
  188. #define MIN_POOL_SIZE 125
  189. #define MAX_STRING_LENGTH 127
  190. #define min(a,b) \
  191. (( a > b) ? b : a)
  192. #define max(a,b) \
  193. (( a > b) ? a : b)
  194. /* Global variables for input and output */
  195. #define Out ST->ConOut
  196. #define In ST->ConIn
  197. extern EFI_EDITOR_GLOBAL_EDITOR MainEditor;
  198. #define SCAN_CODE_NULL 0x00
  199. #define SCAN_CODE_UP 0x01
  200. #define SCAN_CODE_DOWN 0x02
  201. #define SCAN_CODE_RIGHT 0x03
  202. #define SCAN_CODE_LEFT 0x04
  203. #define SCAN_CODE_HOME 0x05
  204. #define SCAN_CODE_END 0x06
  205. #define SCAN_CODE_INS 0x07
  206. #define SCAN_CODE_DEL 0x08
  207. #define SCAN_CODE_PGUP 0x09
  208. #define SCAN_CODE_PGDN 0x0A
  209. #define SCAN_CODE_F1 0x0B
  210. #define SCAN_CODE_F2 0x0C
  211. #define SCAN_CODE_F3 0x0D
  212. #define SCAN_CODE_F4 0x0E
  213. #define SCAN_CODE_F5 0x0F
  214. #define SCAN_CODE_F6 0x10
  215. #define SCAN_CODE_F7 0x11
  216. #define SCAN_CODE_F8 0x12
  217. #define SCAN_CODE_F9 0x13
  218. #define SCAN_CODE_F10 0x14
  219. #define SCAN_CODE_F11 0x15
  220. #define SCAN_CODE_F12 0x16
  221. #define SCAN_CODE_ESC 0x17
  222. #define CHAR_BS 0x08
  223. #define CHAR_LF 0x0a
  224. #define CHAR_CR 0x0d
  225. #define IS_VALID_CHAR(x) \
  226. (x == SCAN_CODE_NULL)
  227. #define IS_DIRECTION_KEY(x) \
  228. ((x >= SCAN_CODE_UP) && (x <= SCAN_CODE_PGDN))
  229. #define IS_FUNCTION_KEY(x) \
  230. ((x >= SCAN_CODE_F1) && x <= (SCAN_CODE_F12))
  231. #define IS_ESCAPE(x) \
  232. (x == SCAN_CODE_ESC)
  233. #endif /* _EDITOR_H */