1 /** @file
2 
3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 
13 **/
14 
15 #ifndef _EFI_EDB_SUPPORT_H_
16 #define _EFI_EDB_SUPPORT_H_
17 
18 #include <Uefi.h>
19 
20 #define EFI_DEBUG_PROMPT_STRING      L"EDB > "
21 #define EFI_DEBUG_PROMPT_COLUMN      5
22 #define EFI_DEBUG_INPUS_BUFFER_SIZE  64
23 
24 #define EFI_DEBUGGER_LINE_NUMBER_IN_PAGE  0x10
25 
26 #define EFI_DEBUG_MAX_PRINT_BUFFER   (80 * 4)
27 
28 /**
29 
30   Convert hex string to uint.
31 
32   @param  Str  -  The string
33 
34 **/
35 UINTN
36 EFIAPI
37 Xtoi (
38   CHAR16  *Str
39   );
40 
41 /**
42 
43   Convert hex string to uint.
44 
45   @param  Str  -  The string
46 
47 **/
48 UINT64
49 EFIAPI
50 LXtoi (
51   CHAR16  *Str
52   );
53 
54 /**
55 
56   Convert hex string to uint.
57 
58   @param Str  -  The string
59 
60 **/
61 UINTN
62 EFIAPI
63 Atoi (
64   CHAR16  *Str
65   );
66 
67 /**
68 
69   Convert hex string to uint.
70 
71   @param  Str  -  The string
72 
73 **/
74 UINTN
75 EFIAPI
76 AsciiXtoi (
77   CHAR8  *Str
78   );
79 
80 /**
81 
82   Convert hex string to uint.
83 
84   @param Str  -  The string
85 
86 **/
87 UINTN
88 EFIAPI
89 AsciiAtoi (
90   CHAR8  *Str
91   );
92 
93 /**
94   Compare the Unicode and Ascii string pointed by String to the string pointed by String2.
95 
96   @param String - Unicode String to process
97 
98   @param String2 - Ascii string to process
99 
100   @return Return a positive integer if String is lexicall greater than String2; Zero if
101   the two strings are identical; and a negative interger if String is lexically
102   less than String2.
103 
104 **/
105 INTN
106 EFIAPI
107 StrCmpUnicodeAndAscii (
108   IN CHAR16   *String,
109   IN CHAR8    *String2
110   );
111 
112 /**
113 
114   Compare the Unicode string pointed by String to the string pointed by String2.
115 
116   @param  String - Unicode String to process
117   @param  String2 - Unicode string to process
118 
119   @return Return a positive integer if String is lexically greater than String2; Zero if
120   the two strings are identical; and a negative integer if String is lexically
121   less than String2.
122 
123 **/
124 INTN
125 EFIAPI
126 StriCmp (
127   IN CHAR16   *String,
128   IN CHAR16   *String2
129   );
130 
131 /**
132 
133   Compare the Unicode and Ascii string pointed by String to the string pointed by String2.
134 
135   @param  String - Unicode String to process
136   @param  String2 - Ascii string to process
137 
138   @return Return a positive integer if String is lexically greater than String2; Zero if
139   the two strings are identical; and a negative integer if String is lexically
140   less than String2.
141 
142 **/
143 INTN
144 EFIAPI
145 StriCmpUnicodeAndAscii (
146   IN CHAR16   *String,
147   IN CHAR8    *String2
148   );
149 
150 /**
151 
152   Verify if the string is end with the sub string.
153 
154   @param  Str - The string where to search the sub string
155   @param  SubStr - The substring.
156 
157 **/
158 BOOLEAN
159 EFIAPI
160 StrEndWith (
161   IN CHAR16                       *Str,
162   IN CHAR16                       *SubStr
163   );
164 
165 /**
166   Duplicate a string.
167 
168   @param  Src  The string to be duplicated.
169 
170 **/
171 CHAR16 *
172 EFIAPI
173 StrDuplicate (
174   IN CHAR16   *Src
175   );
176 
177 /**
178 
179   Find the next token after one or more specified characters.
180 
181   @param  String    Point to the string where to find the substring.
182   @param  CharSet   Point to the string to be found.
183 
184 **/
185 CHAR16 *
186 EFIAPI
187 StrGetNewTokenLine (
188   IN CHAR16                       *String,
189   IN CHAR16                       *CharSet
190   );
191 
192 /**
193 
194   Find the next token after one or more specified characters.
195 
196   @param  CharSet   Point to the string to be found.
197 
198 **/
199 CHAR16 *
200 EFIAPI
201 StrGetNextTokenLine (
202   IN CHAR16                       *CharSet
203   );
204 
205 /**
206 
207   Find the next token after one specificed characters.
208 
209   @param  String    Point to the string where to find the substring.
210   @param  CharSet   Point to the string to be found.
211 
212 **/
213 CHAR16 *
214 EFIAPI
215 StrGetNewTokenField (
216   IN CHAR16                       *String,
217   IN CHAR16                       *CharSet
218   );
219 
220 /**
221 
222   Find the next token after one specificed characters.
223 
224   @param  CharSet   Point to the string to be found.
225 
226 **/
227 CHAR16 *
228 EFIAPI
229 StrGetNextTokenField (
230   IN CHAR16                       *CharSet
231   );
232 
233 /**
234 
235   Patch a character to the end of a string.
236 
237   @param  Buffer   The string to be patched.
238   @param  Patch    The patch character.
239 
240 **/
241 VOID
242 EFIAPI
243 PatchForStrTokenAfter (
244   IN CHAR16    *Buffer,
245   IN CHAR16    Patch
246   );
247 
248 /**
249   Patch a character at the beginning of a string.
250 
251   @param  Buffer   The string to be patched.
252   @param  Patch    The patch character.
253 
254 **/
255 VOID
256 EFIAPI
257 PatchForStrTokenBefore (
258   IN CHAR16    *Buffer,
259   IN CHAR16    Patch
260   );
261 
262 /**
263 
264   Find the next token after one or more specified characters.
265 
266   @param  String    Point to the string where to find the substring.
267   @param  CharSet   Point to the string to be found.
268 
269 **/
270 CHAR8 *
271 EFIAPI
272 AsciiStrGetNewTokenLine (
273   IN CHAR8                       *String,
274   IN CHAR8                       *CharSet
275   );
276 
277 /**
278 
279   Find the next token after one or more specified characters.
280 
281   @param  CharSet   Point to the string to be found.
282 
283 **/
284 CHAR8 *
285 EFIAPI
286 AsciiStrGetNextTokenLine (
287   IN CHAR8                       *CharSet
288   );
289 
290 /**
291 
292   Find the next token after one specificed characters.
293 
294   @param  String    Point to the string where to find the substring.
295   @param  CharSet   Point to the string to be found.
296 
297 **/
298 CHAR8 *
299 EFIAPI
300 AsciiStrGetNewTokenField (
301   IN CHAR8                       *String,
302   IN CHAR8                       *CharSet
303   );
304 
305 /**
306 
307   Find the next token after one specificed characters.
308 
309   @param  CharSet   Point to the string to be found.
310 
311 **/
312 CHAR8 *
313 EFIAPI
314 AsciiStrGetNextTokenField (
315   IN CHAR8                       *CharSet
316   );
317 
318 /**
319 
320   Patch a character to the end of a string.
321 
322   @param  Buffer   The string to be patched.
323   @param  Patch    The patch character.
324 
325 **/
326 VOID
327 EFIAPI
328 PatchForAsciiStrTokenAfter (
329   IN CHAR8    *Buffer,
330   IN CHAR8    Patch
331   );
332 
333 /**
334   Patch a character at the beginning of a string.
335 
336   @param  Buffer   The string to be patched.
337   @param  Patch    The patch character.
338 
339 **/
340 VOID
341 EFIAPI
342 PatchForAsciiStrTokenBefore (
343   IN CHAR8    *Buffer,
344   IN CHAR8    Patch
345   );
346 
347 /**
348 
349   Shell Library.
350   Get user input.
351 
352   @param  Prompt    The prompt string.
353   @param  InStr     Point to the input string.
354   @param  StrLen    The max length of string user can input.
355 
356 **/
357 VOID
358 EFIAPI
359 Input (
360   IN CHAR16    *Prompt OPTIONAL,
361   OUT CHAR16   *InStr,
362   IN UINTN     StrLen
363   );
364 
365 /**
366 
367   SetPageBreak.
368 
369 **/
370 BOOLEAN
371 EFIAPI
372 SetPageBreak (
373   VOID
374   );
375 
376 /**
377   Print a Unicode string to the output device.
378 
379   @param  Format    A Null-terminated Unicode format string.
380   @param  ...       The variable argument list that contains pointers to Null-
381                     terminated Unicode strings to be printed
382 
383 **/
384 UINTN
385 EFIAPI
386 EDBPrint (
387   IN CONST CHAR16  *Format,
388   ...
389   );
390 
391 /**
392   Print a Unicode string to the output buffer.
393 
394   @param  Buffer          A pointer to the output buffer for the produced Null-terminated
395                           Unicode string.
396   @param  BufferSize      The size, in bytes, of the output buffer specified by StartOfBuffer.
397   @param  Format          A Null-terminated Unicode format string.
398   @param  ...             The variable argument list that contains pointers to Null-
399                           terminated Unicode strings to be printed
400 
401 **/
402 UINTN
403 EFIAPI
404 EDBSPrint (
405   OUT CHAR16        *Buffer,
406   IN  INTN          BufferSize,
407   IN  CONST CHAR16  *Format,
408   ...
409   );
410 
411 /**
412   Print a Unicode string to the output buffer with specified offset..
413 
414   @param  Buffer          A pointer to the output buffer for the produced Null-terminated
415                           Unicode string.
416   @param  BufferSize      The size, in bytes, of the output buffer specified by StartOfBuffer.
417   @param  Offset          The offset of the buffer.
418   @param  Format          A Null-terminated Unicode format string.
419   @param  ...             The variable argument list that contains pointers to Null-
420                           terminated Unicode strings to be printed
421 
422 **/
423 UINTN
424 EFIAPI
425 EDBSPrintWithOffset (
426   OUT CHAR16        *Buffer,
427   IN  INTN          BufferSize,
428   IN  UINTN         Offset,
429   IN  CONST CHAR16  *Format,
430   ...
431   );
432 
433 /**
434 
435   Read a file.
436   If ScanFs is FLASE, it will use DebuggerPrivate->Vol as default Fs.
437   If ScanFs is TRUE, it will scan all FS and check the file.
438   If there is only one file match the name, it will be read.
439   If there is more than one file match the name, it will return Error.
440 
441   @param  DebuggerPrivate - EBC Debugger private data structure
442   @param  FileName        - The file to be read.
443   @param  BufferSize      - The file buffer size
444   @param  Buffer          - The file buffer
445   @param  ScanFs          - Need Scan all FS
446 
447   @retval EFI_SUCCESS    - read file successfully
448   @retval EFI_NOT_FOUND  - file not found
449   @retval EFI_NO_MAPPING - there is duplicated files found
450 
451 **/
452 EFI_STATUS
453 EFIAPI
454 ReadFileToBuffer (
455   IN  EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
456   IN  CHAR16                      *FileName,
457   OUT UINTN                       *BufferSize,
458   OUT VOID                        **Buffer,
459   IN  BOOLEAN                     ScanFs
460   );
461 
462 /**
463 
464   Get file name under this dir with index
465 
466   @param  DebuggerPrivate - EBC Debugger private data structure
467   @param  DirName         - The dir to be read.
468   @param  FileName        - The file name pattern under this dir
469   @param  Index           - The file index under this dir
470 
471   @return File Name which match the pattern and index.
472 
473 **/
474 CHAR16 *
475 EFIAPI
476 GetFileNameUnderDir (
477   IN  EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
478   IN  CHAR16                      *DirName,
479   IN  CHAR16                      *FileName,
480   IN OUT UINTN                    *Index
481   );
482 
483 #endif
484