d1dec644a6b7a079f8d1a6a88072ab2ab54b154d
[efi/shell/.git] / shellenv / shelle.h
1 /*++
2
3 Copyright (c) 2005, Intel Corporation                                                         
4 All rights reserved. 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 Module Name:
13
14   shelle.h
15
16 Abstract:
17  
18 Revision History
19
20 --*/
21
22 #ifndef _SHELLE_H_
23 #define _SHELLE_H_
24
25 #include "EfiShellLib.h"
26 #include "shellenv.h"
27
28 //
29 // Internal defines
30 //
31 #define COMMON_CMDLINE_LENGTH 32
32 #define COMMON_ARG_COUNT      32
33 #define COMMON_ARG_LENGTH     32
34
35 //
36 // Keep these 2 macros because conio.c and map.c(maybe more other files) uses
37 // them!!
38 //
39 #define MAX_CMDLINE     256
40 #define MAX_ARG_LENGTH  256
41
42 //
43 // The definitions of VARIABLE_ID'Flags
44 //
45 #define VAR_ID_NON_VOL            0x01
46 #define VAR_ID_INVALID            0x02
47 #define VAR_ID_ACCESSED           0x04
48 #define VAR_ID_CONSIST            0x08
49
50 #define IsWhiteSpace(c)           (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == 0)
51 #define IsValidChar(c)            (c >= ' ')
52 #define IsDigit(c)                (c >= '0' && c <= '9')
53 #define IsAlpha(c)                ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
54
55 #define GOTO_TARGET_FOUND         (1)
56 #define GOTO_TARGET_NOT_FOUND     (2)
57 #define GOTO_TARGET_DOESNT_EXIST  (3)
58
59 //
60 //  Protocol guid
61 //
62 #define SHELL_GLOBALVAR_PROTOCOL \
63   { \
64     0x47c7b222, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
65   }
66
67 //
68 // Internal structures
69 //
70 //
71 // IDs of different variables stored by the shell environment
72 //
73 #define ENVIRONMENT_VARIABLE_ID \
74   { \
75     0x47c7b224, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
76   }
77
78 #define DEVICE_PATH_MAPPING_ID \
79   { \
80     0x47c7b225, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
81   }
82
83 #define PROTOCOL_ID_ID \
84   { \
85     0x47c7b226, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
86   }
87
88 #define ALIAS_ID \
89   { \
90     0x47c7b227, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
91   }
92
93 //
94 //
95 //
96 #define ENV_REDIR_SIGNATURE EFI_SIGNATURE_32 ('r', 'i', 'd', 's')
97 typedef struct {
98   UINTN                         Signature;
99   BOOLEAN                       Ascii;
100   EFI_STATUS                    WriteError;
101   EFI_FILE_HANDLE               File;
102   EFI_DEVICE_PATH_PROTOCOL      *FilePath;
103   EFI_HANDLE                    Handle;
104   EFI_SIMPLE_TEXT_OUT_PROTOCOL  Out;
105   EFI_SIMPLE_TEXT_IN_PROTOCOL   In;
106 } ENV_SHELL_REDIR_FILE;
107
108 typedef struct {
109   EFI_SHELL_INTERFACE   ShellInt;
110   EFI_SYSTEM_TABLE      *SystemTable;
111
112   ENV_SHELL_REDIR_FILE  StdIn;
113   ENV_SHELL_REDIR_FILE  StdOut;
114   ENV_SHELL_REDIR_FILE  StdErr;
115
116 } ENV_SHELL_INTERFACE;
117
118 typedef struct _ENV_SHELL_INTERFACE_ITEM {
119   EFI_SHELL_ENVIRONMENT             *Interface;
120   EFI_HANDLE                        Handle;
121   struct _ENV_SHELL_INTERFACE_ITEM  *Next;
122 } ENV_SHELL_INTERFACE_ITEM;
123
124 //
125 // Internal prototypes from init.c
126 //
127 EFI_SHELL_INTERFACE       *
128 SEnvNewShell (
129   IN EFI_HANDLE                   ImageHandle
130   );
131
132 //
133 // Internal prototypes from cmddisp.c
134 //
135 VOID
136 SEnvInitCommandTable (
137   VOID
138   );
139
140 EFI_STATUS
141 SEnvAddCommand (
142   IN SHELLENV_INTERNAL_COMMAND    Handler,
143   IN CHAR16                       *CmdStr,
144   IN SHELLCMD_GET_LINE_HELP       GetLineHelp
145   );
146
147 EFI_STATUS
148 SEnvFreeCommandTable (
149   VOID
150   );
151
152 BOOLEAN
153 IsValidCommand (
154   IN CHAR16                   *Cmd
155   );
156
157 SHELLENV_INTERNAL_COMMAND
158 SEnvGetCmdDispath (
159   IN CHAR16                   *CmdName
160   );
161
162 //
163 // From exec.c
164 //
165 VOID
166 SEnvFreeArgument (
167   IN EFI_SHELL_INTERFACE    *ShellInt
168   );
169
170 VOID
171 SEnvFreeArgInfoArray (
172   IN EFI_SHELL_INTERFACE      *ShellInt
173   );
174
175 VOID
176 SEnvFreeRedirArgument (
177   IN EFI_SHELL_INTERFACE   *ShellInt
178   );
179
180 EFI_STATUS
181 SEnvExecute (
182   IN EFI_HANDLE           *ParentImageHandle,
183   IN CHAR16               *CommandLine,
184   IN BOOLEAN              DebugOutput
185   );
186
187 EFI_STATUS
188 SEnvDoExecute (
189   IN EFI_HANDLE           *ParentImageHandle,
190   IN CHAR16               *CommandLine,
191   IN ENV_SHELL_INTERFACE  *Shell,
192   IN BOOLEAN              Output
193   );
194
195 EFI_STATUS
196 SEnvExitGetLineHelp (
197   OUT CHAR16                  **Str
198   )
199 /*++
200
201 Routine Description:
202
203   Get this command's line help
204
205 Arguments:
206
207   Str - The line help
208
209 Returns:
210
211   EFI_SUCCESS   - Success
212
213 --*/
214 ;
215
216 EFI_STATUS
217 SEnvExit (
218   IN EFI_HANDLE               ImageHandle,
219   IN EFI_SYSTEM_TABLE         *SystemTable
220   );
221
222 EFI_STATUS
223 MemLeakTest (
224   IN EFI_HANDLE           ImageHandle,
225   IN EFI_SYSTEM_TABLE     *SystemTable
226   );
227
228 EFI_STATUS
229 SEnvStringToArg (
230   IN CHAR16                   *Str,
231   IN BOOLEAN                  Output,
232   OUT EFI_SHELL_INTERFACE     *ShellInt
233   );
234
235 VOID
236 SEnvIncrementShellNestingLevel (
237   IN VOID
238   );
239
240 VOID
241 SEnvDecrementShellNestingLevel (
242   IN VOID
243   );
244
245 BOOLEAN
246 SEnvIsRootShell (
247   IN VOID
248   );
249
250 VOID
251 SEnvEnablePageBreak (
252   IN INT32      StartRow,
253   IN BOOLEAN    AutoWrap
254   );
255
256 VOID
257 SEnvDisablePageBreak (
258   IN VOID
259   );
260
261 BOOLEAN
262 SEnvGetPageBreak (
263   IN VOID
264   );
265
266 VOID
267 SEnvEnableExecutionBreak (
268   IN VOID
269   );
270
271 VOID
272 SEnvDisableExecutionBreak (
273   IN VOID
274   );
275
276 BOOLEAN
277 SEnvGetExecutionBreak (
278   IN VOID
279   );
280
281 //
282 // Internal prototypes from protid.c
283 //
284 VOID
285 SEnvInitProtocolInfo (
286   VOID
287   );
288
289 EFI_STATUS
290 SEnvLoadDefaultsGetLineHelp (
291   IN OUT CHAR16                     **Str
292   )
293 /*++
294
295 Routine Description:
296
297   Get this command's line help
298
299 Arguments:
300
301   Str - The line help
302
303 Returns:
304
305   EFI_SUCCESS   - Success
306
307 --*/
308 ;
309
310 EFI_STATUS
311 SEnvLoadDefaults (
312   IN EFI_HANDLE           Parent,
313   IN EFI_SYSTEM_TABLE     *SystemTable
314   );
315
316 VOID
317 SEnvLoadInternalProtInfo (
318   VOID
319   );
320
321 VOID
322 SEnvFreeHandleProtocolInfo (
323   VOID
324   );
325
326 //
327 // functions declaration for enumerate protoocl info database
328 //
329 VOID
330 SEnvInitProtocolInfoEnumerator (
331   VOID
332   );
333
334 VOID
335 SEnvCloseProtocolInfoEnumerator (
336   VOID
337   );
338
339 EFI_STATUS
340 SEnvNextProtocolInfo (
341   IN OUT   PROTOCOL_INFO            **ProtocolInfo
342   );
343
344 EFI_STATUS
345 SEnvSkipProtocolInfo (
346   IN UINTN                  SkipNum
347   );
348
349 VOID
350 SEnvResetProtocolInfoEnumerator (
351   VOID
352   );
353
354 VOID
355 SEnvAddProtocol (
356   IN EFI_GUID                                 *Protocol,
357   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpToken OPTIONAL,
358   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpInfo OPTIONAL,
359   IN CHAR16                                   *IdString
360   );
361
362 VOID
363 SEnvIAddProtocol (
364   IN BOOLEAN                                  SaveId,
365   IN EFI_GUID                                 *Protocol,
366   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpToken OPTIONAL,
367   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpInfo OPTIONAL,
368   IN CHAR16                                   *IdString
369   );
370
371 VOID
372 SEnvLoadHandleProtocolInfo (
373   IN EFI_GUID                     *Skip
374   );
375
376 CHAR16                    *
377 SEnvGetProtocol (
378   IN EFI_GUID                     *ProtocolId,
379   IN BOOLEAN                      GenId
380   );
381
382 PROTOCOL_INFO             *
383 SEnvGetProtByStr (
384   IN CHAR16           *Str
385   );
386
387 EFI_STATUS
388 SEnvGetDeviceName (
389   EFI_HANDLE  DeviceHandle,
390   BOOLEAN     UseComponentName,
391   BOOLEAN     UseDevicePath,
392   CHAR8       *Language,
393   CHAR16      **BestDeviceName,
394   EFI_STATUS  *ConfigurationStatus,
395   EFI_STATUS  *DiagnosticsStatus,
396   BOOLEAN     Display,
397   UINTN       Indent
398   );
399
400 EFI_STATUS
401 SEnvCmdGetStringByToken (
402   IN     UINT16         Token,
403   IN OUT CHAR16         **Str
404   );
405
406 EFI_STATUS
407 SEnvDHProt (
408   IN BOOLEAN                      Verbose,
409   IN BOOLEAN                      DriverModel,
410   IN UINTN                        HandleNo,
411   IN EFI_HANDLE                   Handle,
412   IN CHAR8                        *Language
413   );
414
415 EFI_STATUS
416 SEnvHelpGetLineHelp (
417   IN CHAR16         **Str
418   )
419 /*++
420
421 Routine Description:
422
423   Get this command's line help
424
425 Arguments:
426
427   Str - The line help
428
429 Returns:
430
431   EFI_SUCCESS   - Success
432
433 --*/
434 ;
435
436 EFI_STATUS
437 SEnvHelp (
438   IN EFI_HANDLE           ImageHandle,
439   IN EFI_SYSTEM_TABLE     *SystemTable
440   );
441
442 EFI_STATUS
443 SEnvCmdDHGetLineHelp (
444   OUT CHAR16                   **Str
445   )
446 /*++
447
448 Routine Description:
449
450   Get this command's line help
451
452 Arguments:
453
454   Str - The line help
455
456 Returns:
457
458   EFI_SUCCESS   - Success
459
460 --*/
461 ;
462
463 EFI_STATUS
464 SEnvCmdDH (
465   IN EFI_HANDLE               ImageHandle,
466   IN EFI_SYSTEM_TABLE         *SystemTable
467   );
468
469 EFI_STATUS
470 SEnvIGetProtID (
471   IN CHAR16           *Str,
472   OUT EFI_GUID        *ProtId
473   );
474
475 EFI_STATUS
476 SEnvCmdUnloadGetLineHelp (
477   OUT CHAR16                   **Str
478   )
479 /*++
480
481 Routine Description:
482
483   Get this command's line help
484
485 Arguments:
486
487   Str - The line help
488
489 Returns:
490
491   EFI_SUCCESS   - Success
492
493 --*/
494 ;
495
496 EFI_STATUS
497 SEnvCmdUnload (
498   IN EFI_HANDLE               ImageHandle,
499   IN EFI_SYSTEM_TABLE         *SystemTable
500   );
501
502 //
503 // Handle.c
504 //
505 VOID
506 SEnvInitHandleGlobals (
507   VOID
508   );
509
510 VOID
511 SEnvLoadHandleTable (
512   VOID
513   );
514
515 VOID
516 SEnvFreeHandleTable (
517   VOID
518   );
519
520 UINTN
521 SEnvHandleNoFromStr (
522   IN CHAR16       *Str
523   );
524
525 EFI_HANDLE
526 SEnvHandleFromStr (
527   IN CHAR16       *Str
528   );
529
530 UINTN
531 SEnvHandleNoFromUINT (
532   IN UINTN       Value
533   );
534
535 EFI_HANDLE
536 SEnvHandleFromUINT (
537   IN UINTN       Value
538   );
539
540 UINTN
541 SEnvHandleToNumber (
542   IN  EFI_HANDLE  Handle
543   );
544
545 //
546 // functions declaration for enumerate handle database
547 //
548 EFI_STATUS
549 SEnvNextHandle (
550   IN OUT   EFI_HANDLE             **Handle
551   );
552
553 EFI_STATUS
554 SEnvSkipHandle (
555   IN UINTN             NumSkip
556   );
557
558 UINTN
559 SEnvResetHandleEnumerator (
560   IN UINTN             EnumIndex
561   );
562
563 VOID
564 SEnvInitHandleEnumerator (
565   IN              VOID
566   );
567
568 VOID
569 SEnvCloseHandleEnumerator (
570   IN              VOID
571   );
572
573 UINTN
574 SEnvGetHandleNum (
575   IN               VOID
576   );
577 //
578 // Internal prototypes from var.c
579 //
580 VOID
581 SEnvInitVariables (
582   VOID
583   );
584
585 EFI_STATUS
586 SEnvCmdSetGetLineHelp (
587   IN OUT CHAR16                             **Str
588   )
589 /*++
590
591 Routine Description:
592
593   Get this command's line help
594
595 Arguments:
596
597   Str - The line help
598
599 Returns:
600
601   EFI_SUCCESS   - Success
602
603 --*/
604 ;
605
606 EFI_STATUS
607 SEnvCmdSet (
608   IN EFI_HANDLE               ImageHandle,
609   IN EFI_SYSTEM_TABLE         *SystemTable
610   );
611
612 EFI_STATUS
613 SEnvCmdAliasGetLineHelp (
614   IN OUT CHAR16         **Str
615   )
616 /*++
617
618 Routine Description:
619
620   Get this command's line help
621
622 Arguments:
623
624   Str - The line help
625
626 Returns:
627
628   EFI_SUCCESS   - Success
629
630 --*/
631 ;
632
633 EFI_STATUS
634 SEnvCmdAlias (
635   IN EFI_HANDLE               ImageHandle,
636   IN EFI_SYSTEM_TABLE         *SystemTable
637   );
638
639 CHAR16                    *
640 SEnvGetMap (
641   IN CHAR16           *Name
642   );
643
644 CHAR16                    *
645 SEnvGetEnv (
646   IN CHAR16           *Name
647   );
648
649 CHAR16                    *
650 SEnvGetAlias (
651   IN CHAR16           *Name
652   );
653
654 VARIABLE_ID               *
655 SEnvAddVarToList (
656   IN EFI_LIST_ENTRY           *Head,
657   IN CHAR16                   *Name,
658   IN UINT8                    *Value,
659   IN UINTN                    ValueSize,
660   BOOLEAN                     Volatile
661   );
662
663 EFI_STATUS
664 SEnvAddVar (
665   IN EFI_LIST_ENTRY           *Head,
666   IN EFI_GUID                 *Guid,
667   IN CHAR16                   *Name,
668   IN UINT8                    *Value,
669   IN UINTN                    ValueSize,
670   BOOLEAN                     Volatile
671   );
672
673 VARIABLE_ID               *
674 SEnvFindVar (
675   IN EFI_LIST_ENTRY           *Head,
676   IN CHAR16                   *Name
677   );
678
679 //
680 // Prototypes from conio.c
681 //
682 VOID
683 SEnvConIoInitDosKey (
684   VOID
685   );
686
687 EFI_STATUS
688 SEnvConIoOpen (
689   IN EFI_FILE                   *File,
690   OUT EFI_FILE                  **NewHandle,
691   IN CHAR16                     *FileName,
692   IN UINT64                     OpenMode,
693   IN UINT64                     Attributes
694   );
695
696 EFI_STATUS
697 SEnvConIoNop (
698   IN EFI_FILE  *File
699   );
700
701 EFI_STATUS
702 SEnvConIoGetPosition (
703   IN EFI_FILE                   *File,
704   OUT UINT64                    *Position
705   );
706
707 EFI_STATUS
708 SEnvConIoSetPosition (
709   IN EFI_FILE                   *File,
710   OUT UINT64                    Position
711   );
712
713 EFI_STATUS
714 SEnvConIoGetInfo (
715   IN EFI_FILE                   *File,
716   IN EFI_GUID                   *InformationType,
717   IN OUT UINTN                  *BufferSize,
718   OUT VOID                      *Buffer
719   );
720
721 EFI_STATUS
722 SEnvConIoSetInfo (
723   IN EFI_FILE                   *File,
724   IN EFI_GUID                   *InformationType,
725   IN UINTN                      BufferSize,
726   OUT VOID                      *Buffer
727   );
728
729 EFI_STATUS
730 SEnvConIoWrite (
731   IN EFI_FILE                   *File,
732   IN OUT UINTN                  *BufferSize,
733   IN VOID                       *Buffer
734   );
735
736 EFI_STATUS
737 SEnvConIoRead (
738   IN EFI_FILE                   *File,
739   IN OUT UINTN                  *BufferSize,
740   IN VOID                       *Buffer
741   );
742
743 EFI_STATUS
744 SEnvErrIoWrite (
745   IN EFI_FILE                   *File,
746   IN OUT UINTN                  *BufferSize,
747   IN VOID                       *Buffer
748   );
749
750 EFI_STATUS
751 SEnvErrIoRead (
752   IN EFI_FILE                   *File,
753   IN OUT UINTN                  *BufferSize,
754   IN VOID                       *Buffer
755   );
756
757 EFI_STATUS
758 SEnvReset (
759   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
760   IN BOOLEAN                          ExtendedVerification
761   );
762
763 EFI_STATUS
764 SEnvOutputString (
765   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
766   IN CHAR16                       *String
767   );
768
769 EFI_STATUS
770 SEnvTestString (
771   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
772   IN CHAR16                       *String
773   );
774
775 EFI_STATUS
776 SEnvQueryMode (
777   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
778   IN UINTN                        ModeNumber,
779   OUT UINTN                       *Columns,
780   OUT UINTN                       *Rows
781   );
782
783 EFI_STATUS
784 SEnvSetMode (
785   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
786   IN UINTN                        ModeNumber
787   );
788
789 EFI_STATUS
790 SEnvSetAttribute (
791   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
792   IN UINTN                            Attribute
793   );
794
795 EFI_STATUS
796 SEnvClearScreen (
797   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This
798   );
799
800 EFI_STATUS
801 SEnvSetCursorPosition (
802   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
803   IN UINTN                        Column,
804   IN UINTN                        Row
805   );
806
807 EFI_STATUS
808 SEnvEnableCursor (
809   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
810   IN BOOLEAN                      Enable
811   );
812
813 EFI_STATUS
814 SEnvDummyReset (
815   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
816   IN BOOLEAN                          ExtendedVerification
817   );
818
819 EFI_STATUS
820 SEnvDummyOutputString (
821   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
822   IN CHAR16                       *String
823   );
824
825 EFI_STATUS
826 SEnvDummyTestString (
827   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
828   IN CHAR16                       *String
829   );
830
831 EFI_STATUS
832 SEnvDummyQueryMode (
833   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
834   IN UINTN                        ModeNumber,
835   OUT UINTN                       *Columns,
836   OUT UINTN                       *Rows
837   );
838
839 EFI_STATUS
840 SEnvDummySetMode (
841   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
842   IN UINTN                        ModeNumber
843   );
844
845 EFI_STATUS
846 SEnvDummySetAttribute (
847   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
848   IN UINTN                            Attribute
849   );
850
851 EFI_STATUS
852 SEnvDummyClearScreen (
853   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This
854   );
855
856 EFI_STATUS
857 SEnvDummySetCursorPosition (
858   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
859   IN UINTN                        Column,
860   IN UINTN                        Row
861   );
862
863 EFI_STATUS
864 SEnvDummyEnableCursor (
865   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
866   IN BOOLEAN                      Enable
867   );
868
869 //
870 // Prototypes from ConsoleProxy.c
871 //
872 VOID
873 SEnvOpenConsoleProxy (
874   IN     EFI_HANDLE                       ConInHandle,
875   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
876   IN     EFI_HANDLE                       ConOutHandle,
877   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
878   );
879
880 VOID
881 SEnvCloseConsoleProxy (
882   IN     EFI_HANDLE                       ConInHandle,
883   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
884   IN     EFI_HANDLE                       ConOutHandle,
885   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
886   );
887
888 EFI_STATUS
889 SEnvCheckConsoleProxy (
890   IN     EFI_HANDLE                       ConInHandle,
891   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
892   IN     EFI_HANDLE                       ConOutHandle,
893   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
894   );
895
896 EFI_STATUS
897 SEnvConOutHistoryEnable (
898   IN BOOLEAN      Enable
899   );
900
901 EFI_STATUS
902 SEnvConOutHistoryScrollBack (
903   IN UINTN      *ScrollRows OPTIONAL
904   );
905
906 EFI_STATUS
907 SEnvConOutHistoryScrollForward (
908   IN UINTN      *ScrollRows OPTIONAL
909   );
910
911 EFI_STATUS
912 SEnvConOutHistoryQuitScroll (
913   IN VOID
914   );
915
916 VOID
917 SEnvConOutEnablePageBreak (
918   IN INT32      StartRow,
919   IN BOOLEAN    AutoWrap
920   );
921
922 VOID
923 SEnvConOutDisablePageBreak (
924   IN VOID
925   );
926
927 BOOLEAN
928 SEnvConOutGetPageBreak (
929   IN VOID
930   );
931
932 VOID
933 SEnvSetKeyFilter (
934   IN UINT32      KeyFilter
935   );
936
937 UINT32
938 SEnvGetKeyFilter (
939   IN VOID
940   );
941
942 //
943 // Prototypes from dprot.c
944 //
945 CHAR8                     *
946 GetPdbPath (
947   VOID *ImageBase
948   );
949 VOID
950 PrintShortPdbFileName (
951   CHAR8  *PdbFileName,
952   UINTN  Length
953   );
954
955 VOID
956 SEnvBlkIo (
957   EFI_HANDLE,
958   VOID *
959   );
960 VOID
961 SEnvComponentName (
962   EFI_HANDLE,
963   VOID *
964   );
965 VOID
966 SEnvDPath (
967   EFI_HANDLE,
968   VOID *
969   );
970 VOID
971 SEnvDPathTok (
972   EFI_HANDLE,
973   VOID *
974   );
975 VOID
976 SEnvDebugSupport (
977   EFI_HANDLE,
978   VOID *
979   );
980 VOID
981 SEnvImage (
982   EFI_HANDLE,
983   VOID *
984   );
985 VOID
986 SEnvImageTok (
987   EFI_HANDLE,
988   VOID *
989   );
990 VOID
991 SEnvIsaIo (
992   EFI_HANDLE,
993   VOID *
994   );
995 VOID
996 SEnvPciIo (
997   EFI_HANDLE,
998   VOID *
999   );
1000 VOID
1001 SEnvPciRootBridgeIo (
1002   EFI_HANDLE,
1003   VOID *
1004   );
1005 VOID
1006 SEnvTextOut (
1007   EFI_HANDLE,
1008   VOID *
1009   );
1010 VOID
1011 SEnvUsbIo (
1012   EFI_HANDLE,
1013   VOID *
1014   );
1015 VOID
1016 SEnvBusSpecificDriverOverride (
1017   EFI_HANDLE,
1018   VOID *
1019   );
1020
1021 //
1022 // Prototypes from map.c
1023 //
1024 VOID
1025 SEnvInitMap (
1026   VOID
1027   );
1028
1029 EFI_STATUS
1030 SEnvCmdMapGetLineHelp (
1031   OUT CHAR16                  **Str
1032   )
1033 /*++
1034
1035 Routine Description:
1036
1037   Get this command's line help
1038
1039 Arguments:
1040
1041   Str - The line help
1042
1043 Returns:
1044
1045   EFI_SUCCESS   - Success
1046
1047 --*/
1048 ;
1049
1050 EFI_STATUS
1051 SEnvCmdMap (
1052   IN EFI_HANDLE               ImageHandle,
1053   IN EFI_SYSTEM_TABLE         *SystemTable
1054   );
1055
1056 EFI_STATUS
1057 SEnvCmdConnectGetLineHelp (
1058   OUT CHAR16                  **Str
1059   )
1060 /*++
1061
1062 Routine Description:
1063
1064   Get this command's line help
1065
1066 Arguments:
1067
1068   Str - The line help
1069
1070 Returns:
1071
1072   EFI_SUCCESS   - Success
1073
1074 --*/
1075 ;
1076
1077 EFI_STATUS
1078 SEnvCmdConnect (
1079   IN EFI_HANDLE               ImageHandle,
1080   IN EFI_SYSTEM_TABLE         *SystemTable
1081   );
1082
1083 EFI_STATUS
1084 SEnvCmdDisconnectGetLineHelp (
1085   OUT CHAR16                  **Str
1086   )
1087 /*++
1088
1089 Routine Description:
1090
1091   Get this command's line help
1092
1093 Arguments:
1094
1095   Str - The line help
1096
1097 Returns:
1098
1099   EFI_SUCCESS   - Success
1100
1101 --*/
1102 ;
1103
1104 EFI_STATUS
1105 SEnvCmdDisconnect (
1106   IN EFI_HANDLE               ImageHandle,
1107   IN EFI_SYSTEM_TABLE         *SystemTable
1108   );
1109
1110 EFI_STATUS
1111 SEnvCmdReconnectGetLineHelp (
1112   OUT CHAR16                  **Str
1113   )
1114 /*++
1115
1116 Routine Description:
1117
1118   Get this command's line help
1119
1120 Arguments:
1121
1122   Str - The line help
1123
1124 Returns:
1125
1126   EFI_SUCCESS   - Success
1127
1128 --*/
1129 ;
1130
1131 EFI_STATUS
1132 SEnvCmdReconnect (
1133   IN EFI_HANDLE               ImageHandle,
1134   IN EFI_SYSTEM_TABLE         *SystemTable
1135   );
1136
1137 VARIABLE_ID               *
1138 SEnvMapDeviceFromName (
1139   IN OUT CHAR16   **pPath
1140   );
1141
1142 EFI_DEVICE_PATH_PROTOCOL  *
1143 SEnvIFileNameToPath (
1144   IN CHAR16               *Path
1145   );
1146
1147 EFI_DEVICE_PATH_PROTOCOL  *
1148 SEnvFileNameToPath (
1149   IN CHAR16               *Path
1150   );
1151
1152 EFI_DEVICE_PATH_PROTOCOL  *
1153 SEnvNameToPath (
1154   IN CHAR16                   *PathName
1155   );
1156
1157 EFI_STATUS
1158 SEnvSetCurrentDevice (
1159   IN CHAR16       *Name
1160   );
1161
1162 CHAR16                    *
1163 SEnvGetCurDir (
1164   IN CHAR16       *DeviceName OPTIONAL
1165   );
1166
1167 EFI_STATUS
1168 SEnvCmdCdGetLineHelp (
1169   OUT CHAR16      **Str
1170   )
1171 /*++
1172
1173 Routine Description:
1174
1175   Get this command's line help
1176
1177 Arguments:
1178
1179   Str - The line help
1180
1181 Returns:
1182
1183   EFI_SUCCESS   - Success
1184
1185 --*/
1186 ;
1187
1188 EFI_STATUS
1189 SEnvCmdCd (
1190   IN EFI_HANDLE           ImageHandle,
1191   IN EFI_SYSTEM_TABLE     *SystemTable
1192   );
1193
1194 EFI_STATUS
1195 SEnvGetFsName (
1196   IN EFI_HANDLE               Handle,
1197   IN BOOLEAN                  ConsistMapping,
1198   OUT CHAR16                  **Name
1199   );
1200
1201 EFI_STATUS
1202 SEnvGetFsDevicePath (
1203   IN CHAR16                    *Name,
1204   OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
1205   );
1206
1207 //
1208 // Prototypes from echo.c
1209 //
1210 EFI_STATUS
1211 SEnvCmdEchoGetLineHelp (
1212   OUT CHAR16              **Str
1213   )
1214 /*++
1215
1216 Routine Description:
1217
1218   Get this command's line help
1219
1220 Arguments:
1221
1222   Str - The line help
1223
1224 Returns:
1225
1226   EFI_SUCCESS   - Success
1227
1228 --*/
1229 ;
1230
1231 EFI_STATUS
1232 SEnvCmdEcho (
1233   IN EFI_HANDLE           ImageHandle,
1234   IN EFI_SYSTEM_TABLE     *SystemTable
1235   );
1236
1237 //
1238 // Prototypes from if.c
1239 //
1240 EFI_STATUS
1241 SEnvCmdIfGetLineHelp (
1242   OUT CHAR16              **Str
1243   )
1244 /*++
1245
1246 Routine Description:
1247
1248   Get this command's line help
1249
1250 Arguments:
1251
1252   Str - The line help
1253
1254 Returns:
1255
1256   EFI_SUCCESS   - Success
1257
1258 --*/
1259 ;
1260
1261 EFI_STATUS
1262 SEnvCmdIf (
1263   IN EFI_HANDLE           ImageHandle,
1264   IN EFI_SYSTEM_TABLE     *SystemTable
1265   );
1266
1267 EFI_STATUS
1268 SEnvCmdElseGetLineHelp (
1269   OUT CHAR16              **Str
1270   )
1271 /*++
1272
1273 Routine Description:
1274
1275   Get this command's line help
1276
1277 Arguments:
1278
1279   Str - The line help
1280
1281 Returns:
1282
1283   EFI_SUCCESS   - Success
1284
1285 --*/
1286 ;
1287
1288 EFI_STATUS
1289 SEnvCmdElse (
1290   IN EFI_HANDLE           ImageHandle,
1291   IN EFI_SYSTEM_TABLE     *SystemTable
1292   );
1293
1294 EFI_STATUS
1295 SEnvCmdEndifGetLineHelp (
1296   OUT CHAR16              **Str
1297   )
1298 /*++
1299
1300 Routine Description:
1301
1302   Get this command's line help
1303
1304 Arguments:
1305
1306   Str - The line help
1307
1308 Returns:
1309
1310   EFI_SUCCESS   - Success
1311
1312 --*/
1313 ;
1314
1315 EFI_STATUS
1316 SEnvCmdEndif (
1317   IN EFI_HANDLE           ImageHandle,
1318   IN EFI_SYSTEM_TABLE     *SystemTable
1319   );
1320
1321 EFI_STATUS
1322 SEnvCmdShiftGetLineHelp (
1323   OUT CHAR16              **Str
1324   )
1325 /*++
1326
1327 Routine Description:
1328
1329   Get this command's line help
1330
1331 Arguments:
1332
1333   Str - The line help
1334
1335 Returns:
1336
1337   EFI_SUCCESS   - Success
1338
1339 --*/
1340 ;
1341
1342 EFI_STATUS
1343 SEnvCmdShift (
1344   IN EFI_HANDLE           ImageHandle,
1345   IN EFI_SYSTEM_TABLE     *SystemTable
1346   );
1347 //
1348 // Prototypes from wait.c
1349 //
1350 EFI_STATUS
1351 SEnvNoUse (
1352   IN EFI_HANDLE           ImageHandle,
1353   IN EFI_SYSTEM_TABLE     *SystemTable
1354   );
1355
1356 //
1357 // Prototypes from goto.c
1358 //
1359 EFI_STATUS
1360 SEnvCmdGotoGetLineHelp (
1361   OUT CHAR16              **Str
1362   )
1363 /*++
1364
1365 Routine Description:
1366
1367   Get this command's line help
1368
1369 Arguments:
1370
1371   Str - The line help
1372
1373 Returns:
1374
1375   EFI_SUCCESS   - Success
1376
1377 --*/
1378 ;
1379
1380 EFI_STATUS
1381 SEnvCmdGoto (
1382   IN EFI_HANDLE           ImageHandle,
1383   IN EFI_SYSTEM_TABLE     *SystemTable
1384   );
1385
1386 EFI_STATUS
1387 SEnvCheckForGotoTarget (
1388   IN  CHAR16 *Candidate,
1389   IN  UINT64 GotoFilePos,
1390   IN  UINT64 FilePosition,
1391   OUT UINTN  *GotoTargetStatus
1392   );
1393
1394 VOID
1395 SEnvPrintLabelNotFound (
1396   VOID
1397   );
1398
1399 VOID
1400 SEnvInitTargetLabel (
1401   VOID
1402   );
1403
1404 VOID
1405 SEnvFreeTargetLabel (
1406   VOID
1407   );
1408
1409 //
1410 // Prototypes from for.c
1411 //
1412 VOID
1413 SEnvInitForLoopInfo (
1414   VOID
1415   );
1416
1417 EFI_STATUS
1418 SEnvSubstituteForLoopIndex (
1419   IN CHAR16  *Str,
1420   OUT CHAR16 **Val
1421   );
1422
1423 EFI_STATUS
1424 SEnvCmdForGetLineHelp (
1425   OUT CHAR16              **Str
1426   )
1427 /*++
1428
1429 Routine Description:
1430
1431   Get this command's line help
1432
1433 Arguments:
1434
1435   Str - The line help
1436
1437 Returns:
1438
1439   EFI_SUCCESS   - Success
1440
1441 --*/
1442 ;
1443
1444 EFI_STATUS
1445 SEnvCmdFor (
1446   IN EFI_HANDLE           ImageHandle,
1447   IN EFI_SYSTEM_TABLE     *SystemTable
1448   );
1449
1450 EFI_STATUS
1451 SEnvCmdEndforGetLineHelp (
1452   OUT CHAR16              **Str
1453   )
1454 /*++
1455
1456 Routine Description:
1457
1458   Get this command's line help
1459
1460 Arguments:
1461
1462   Str - The line help
1463
1464 Returns:
1465
1466   EFI_SUCCESS   - Success
1467
1468 --*/
1469 ;
1470
1471 EFI_STATUS
1472 SEnvCmdEndfor (
1473   IN EFI_HANDLE           ImageHandle,
1474   IN EFI_SYSTEM_TABLE     *SystemTable
1475   );
1476
1477 //
1478 // Prototypes from pause.c
1479 //
1480 EFI_STATUS
1481 SEnvCmdPauseGetLineHelp (
1482   OUT CHAR16              **Str
1483   )
1484 /*++
1485
1486 Routine Description:
1487
1488   Get this command's line help
1489
1490 Arguments:
1491
1492   Str - The line help
1493
1494 Returns:
1495
1496   EFI_SUCCESS   - Success
1497
1498 --*/
1499 ;
1500
1501 EFI_STATUS
1502 SEnvCmdPause (
1503   IN EFI_HANDLE           ImageHandle,
1504   IN EFI_SYSTEM_TABLE     *SystemTable
1505   );
1506
1507 //
1508 // Prototypes from marg.c
1509 //
1510 CHAR16                    *
1511 SEnvFileHandleToFileName (
1512   IN EFI_FILE_HANDLE      Handle
1513   );
1514
1515 EFI_STATUS
1516 SEnvDelDupFileArg (
1517   IN EFI_LIST_ENTRY   *ListHead
1518   );
1519
1520 EFI_STATUS
1521 SEnvFreeFileList (
1522   IN OUT EFI_LIST_ENTRY   *ListHead
1523   );
1524
1525 EFI_STATUS
1526 SEnvFileMetaArg (
1527   IN CHAR16               *Arg,
1528   IN OUT EFI_LIST_ENTRY   *ListHead
1529   );
1530
1531 EFI_STATUS
1532 SEnvIFileMetaArg (
1533   IN CHAR16               *Arg,
1534   IN OUT EFI_LIST_ENTRY   *ListHead
1535   );
1536
1537 EFI_STATUS
1538 SEnvIFileMetaArgNoWildCard (
1539   IN CHAR16               *Arg,
1540   IN OUT EFI_LIST_ENTRY   *ListHead
1541   );
1542
1543 EFI_STATUS
1544 CheckValidFileName (
1545   IN OUT CHAR16               *Path
1546   );
1547
1548 VOID
1549 EFIStructsPrint (
1550   IN  VOID                     *Buffer,
1551   IN  UINTN                    BlockSize,
1552   IN  UINT64                   BlockAddress,
1553   IN  EFI_BLOCK_IO_PROTOCOL    *BlkIo
1554   );
1555
1556 EFI_STATUS
1557 DumpBlockDev (
1558   IN EFI_HANDLE               ImageHandle,
1559   IN EFI_SYSTEM_TABLE         *SystemTable
1560   )
1561 /*++
1562
1563 Routine Description:
1564
1565   Dump block device
1566
1567 Arguments:
1568
1569   ImageHandle - The image handle
1570   SystemTable - The system table
1571
1572 Returns:
1573
1574   EFI_SUCCESS - Success
1575
1576 --*/
1577 ;
1578
1579 //
1580 // Device path info
1581 //
1582 #define DEVICEPATH_INFO_SIGNATURE EFI_SIGNATURE_32 ('d', 'p', 'i', 's')
1583 typedef struct {
1584   UINTN                     Signature;
1585   EFI_LIST_ENTRY            Link;
1586   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
1587   BOOLEAN                   Found;
1588 } DEVICEPATH_INFO;
1589
1590 VOID
1591 SEnvGetCurMappings (
1592   VOID
1593   );
1594 VOID
1595 SEnvCheckValidMappings (
1596   VARIABLE_ID *Var
1597   );
1598 VOID
1599 SEnvGetDevicePathList (
1600   EFI_LIST_ENTRY    *ListHead,
1601   EFI_GUID          *Protocol
1602   );
1603 BOOLEAN
1604 SEnvCompareDevicePathList (
1605   EFI_LIST_ENTRY    *ListHead1,
1606   EFI_LIST_ENTRY    *ListHead2
1607   );
1608
1609 //
1610 // Global data
1611 //
1612 extern EFI_GUID                     SEnvEnvId;
1613 extern EFI_GUID                     SEnvMapId;
1614 extern EFI_GUID                     SEnvProtId;
1615 extern EFI_GUID                     SEnvAliasId;
1616 extern EFI_SHELL_ENVIRONMENT        SEnvInterface;
1617 extern EFI_SHELL_ENVIRONMENT2       SEnvInterface2;
1618
1619 extern EFI_FILE                     SEnvIOFromCon;
1620 extern EFI_FILE                     SEnvErrIOFromCon;
1621 extern FLOCK                        SEnvLock;
1622 extern FLOCK                        SEnvGuidLock;
1623 extern UINTN                        SEnvNoHandles;
1624 extern EFI_HANDLE                   *SEnvHandles;
1625 extern EFI_SIMPLE_TEXT_OUT_PROTOCOL SEnvConToIo;
1626 extern EFI_SIMPLE_TEXT_OUT_PROTOCOL SEnvDummyConToIo;
1627
1628 extern EFI_LIST_ENTRY               SEnvProtocolInfo;
1629 extern EFI_LIST_ENTRY               SEnvEnv;
1630 extern EFI_LIST_ENTRY               SEnvMap;
1631 extern EFI_LIST_ENTRY               SEnvCmds;
1632 extern EFI_LIST_ENTRY               SEnvCurMapping;
1633 extern UINTN                        SEnvNoHandles;
1634 extern EFI_HANDLE                   *SEnvHandles;
1635 extern EFI_LIST_ENTRY               SEnvAlias;
1636 //
1637 // Data structures and Prototypes from batch.c
1638 //
1639 //
1640 // Goto target searching status
1641 //
1642 #define GOTO_TARGET_FOUND         (1)
1643 #define GOTO_TARGET_NOT_FOUND     (2)
1644 #define GOTO_TARGET_DOESNT_EXIST  (3)
1645
1646 //
1647 // Data structure for batch script processing
1648 //
1649 //
1650 //  Definitions for the statement stack
1651 //
1652 //  To allow checking if/endif or for/endif matching, and to prevent from
1653 //  jumpting into another loop using goto, for each script, a statement
1654 //  stack is maintained. It contain the nesting information of the if/for
1655 //  statements. For the if statement, the true or false of the condition
1656 //  is recorded; for the for statement, the variable name and a list of
1657 //  variable values are recorded.
1658 //
1659 #define EFI_BATCH_VAR_SIGNATURE EFI_SIGNATURE_32 ('b', 'v', 'a', 'r')
1660 typedef struct {
1661   UINTN           Signature;
1662   EFI_LIST_ENTRY  Link;
1663
1664   CHAR16          *Value;
1665 } EFI_BATCH_VAR_VALUE;
1666
1667 typedef enum {
1668   StmtFor,
1669   StmtIf,
1670   StmtUndefined
1671 } EFI_BATCH_STMT_TYPE;
1672
1673 #define EFI_BATCH_STMT_SIGNATURE  EFI_SIGNATURE_32 ('b', 's', 'm', 't')
1674 typedef struct {
1675   CHAR16          VariableName[1];
1676   EFI_LIST_ENTRY  ValueList;
1677   UINTN           BeginLineNum;
1678 } EFI_BATCH_FOR_INFO;
1679
1680 typedef struct {
1681   BOOLEAN Condition;
1682   BOOLEAN FoundElse;
1683 } EFI_BATCH_IF_INFO;
1684
1685 typedef union {
1686   EFI_BATCH_FOR_INFO  ForInfo;
1687   EFI_BATCH_IF_INFO   IfInfo;
1688 } EFI_BATCH_STMT_INFO;
1689
1690 typedef struct {
1691   UINTN               Signature;
1692   EFI_LIST_ENTRY      Link;
1693
1694   EFI_BATCH_STMT_TYPE StmtType;
1695   UINT64              BeginFilePos;
1696   EFI_BATCH_STMT_INFO StmtInfo;
1697 } EFI_BATCH_STATEMENT;
1698
1699 typedef struct {
1700   UINTN           NestLevel;
1701   EFI_LIST_ENTRY  StmtList;
1702
1703 } EFI_BATCH_STMT_STACK;
1704
1705 //
1706 //  Definitions for the script stack
1707 //
1708 //  In order to support nested scripts (script calling script calling
1709 //  script...). There is an script stack "ScriptStack". It is a list of
1710 //  scripts, each script contain a argument list, a statement stack, and
1711 //  the current file position. The argument list contains Argv[0] - Argv[n]
1712 //  of the script, this allows positional argument substitution to be done
1713 //  when each line is read and scanned.
1714 //
1715 #define EFI_BATCH_ARG_SIGNATURE EFI_SIGNATURE_32 ('b', 'a', 'r', 'g')
1716 typedef struct {
1717   UINTN               Signature;
1718   EFI_LIST_ENTRY      Link;
1719
1720   CHAR16              *ArgValue;
1721   EFI_SHELL_ARG_INFO  *ArgInfo;
1722 } EFI_BATCH_ARGUMENT;
1723
1724 #define EFI_BATCH_SCRIPT_SIGNATURE  EFI_SIGNATURE_32 ('b', 's', 'p', 't')
1725 typedef struct {
1726   UINTN                 Signature;
1727   EFI_LIST_ENTRY        Link;
1728
1729   EFI_LIST_ENTRY        ArgListHead;  // Head of argument list
1730   EFI_BATCH_STMT_STACK  StmtStack;
1731   UINT64                FilePosition; // Current file position
1732   BOOLEAN               BatchAbort;
1733   UINTN                 LineNumber;
1734   UINTN                 ShiftIndex;
1735 } EFI_BATCH_SCRIPT;
1736
1737 typedef struct {
1738   UINTN           NestLevel;
1739   EFI_LIST_ENTRY  ScriptList;
1740 } EFI_BATCH_SCRIPT_STACK;
1741
1742 #define EFI_SHELL_BATCH_MODE_SIGNATURE  EFI_SIGNATURE_32 ('s', 'b', 'm', 's')
1743 typedef struct _EFI_SHELL_BATCH_MODE_STACK {
1744   UINTN           Signature;
1745   CHAR16          ModeName[64];
1746   EFI_LIST_ENTRY  Link;
1747 } EFI_SHELL_BATCH_MODE_STACK;
1748 //
1749 // Prototype declaration
1750 //
1751 VOID
1752 SEnvInitBatch (
1753   VOID
1754   );
1755
1756 EFI_STATUS
1757 SEnvBatchSetFilePosition (
1758   IN UINT64 NewPos
1759   );
1760
1761 EFI_STATUS
1762 SEnvBatchFindVariable (
1763   IN  CHAR16                   *VariableName,
1764   OUT CHAR16                   **Value
1765   );
1766
1767 EFI_BATCH_STATEMENT *
1768 SEnvBatchExtraStackTop (
1769   VOID
1770   );
1771
1772 EFI_BATCH_STATEMENT *
1773 SEnvBatchStmtStackTop (
1774   VOID
1775   );
1776
1777 /*
1778 BOOLEAN
1779 SEnvBatchIsStmtStackEmpty (
1780   VOID
1781   );
1782 */
1783 EFI_BATCH_STATEMENT *
1784 SEnvGetJumpStmt (
1785   VOID
1786   );
1787
1788 EFI_STATUS
1789 SEnvBatchFindArgument (
1790   IN  UINTN                    ArgumentNum,
1791   OUT CHAR16                   **Value,
1792   OUT EFI_SHELL_ARG_INFO       **ArgInfo
1793   );
1794
1795 EFI_STATUS
1796 SEnvFindBatchFileName (
1797   OUT CHAR16                   **Value
1798   );
1799
1800 EFI_STATUS
1801 SEnvBatchShiftArgument (
1802   VOID
1803   );
1804
1805 VOID
1806 SEnvBatchSetGotoActive (
1807   VOID
1808   );
1809
1810 BOOLEAN
1811 SEnvBatchGetGotoActive (
1812   VOID
1813   );
1814
1815 UINTN
1816 SEnvGetLineNumber (
1817   VOID
1818   );
1819
1820 VOID
1821 SEnvSetLineNumber (
1822   UINTN                        LineNumber
1823   );
1824
1825 BOOLEAN
1826 SEnvBatchGetRewind (
1827   VOID
1828   );
1829
1830 EFI_STATUS
1831 SEnvTryMoveUpJumpStmt (
1832   IN  EFI_BATCH_STMT_TYPE      StmtType,
1833   OUT BOOLEAN                  *Success
1834   );
1835
1836 EFI_STATUS
1837 SEnvMoveDownJumpStmt (
1838   IN  EFI_BATCH_STMT_TYPE      StmtType
1839   ) ;
1840
1841 EFI_STATUS
1842 SEnvBatchResetJumpStmt (
1843   VOID
1844   );
1845
1846 BOOLEAN
1847 SEnvBatchExtraStackEmpty (
1848   VOID
1849   );
1850
1851 BOOLEAN
1852 SEnvBatchIsActive (
1853   VOID
1854   );
1855
1856 VOID
1857 SEnvFreeResources (
1858   VOID
1859   );
1860
1861 VOID
1862 SEnvSetBatchAbort (
1863   VOID
1864   );
1865
1866 CHAR16              *
1867 SEnvBatchGetLastError (
1868   VOID
1869   );
1870
1871 EFI_STATUS
1872 SEnvBatchEchoCommand (
1873   IN  ENV_SHELL_INTERFACE      *Shell
1874   );
1875
1876 BOOLEAN
1877 SEnvBatchGetEcho (
1878   VOID
1879   );
1880
1881 VOID
1882 SEnvBatchSetEcho (
1883   IN  BOOLEAN                  Val
1884   );
1885
1886 EFI_STATUS
1887 SEnvExecuteScript (
1888   IN  ENV_SHELL_INTERFACE      *Shell,
1889   IN  EFI_FILE_HANDLE          File
1890   );
1891
1892 BOOLEAN
1893 SEnvBatchVarIsLastError (
1894   IN  CHAR16                   *Name
1895   );
1896
1897 VOID
1898 SEnvBatchGetConsole (
1899   OUT EFI_SIMPLE_TEXT_IN_PROTOCOL  **ConIn,
1900   OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL **ConOut
1901   );
1902
1903 EFI_STATUS
1904 SEnvBatchPushStmtStack (
1905   IN  EFI_BATCH_STMT_TYPE      StmtType,
1906   IN  BOOLEAN                  PushExtraStack
1907   );
1908
1909 EFI_STATUS
1910 SEnvBatchPushFor2Stack (
1911   IN EFI_BATCH_STMT_TYPE                    StmtType,
1912   IN BOOLEAN                                PushExtraStack
1913   );
1914
1915 EFI_STATUS
1916 SEnvBatchPopStmtStack (
1917   IN  UINTN                    PopCount,
1918   IN  BOOLEAN                  PushExtraStack
1919   );
1920
1921 EFI_STATUS
1922 SEnvBatchSetCondition (
1923   IN  BOOLEAN                  Val
1924   );
1925
1926 BOOLEAN
1927 SEnvBatchGetCondition (
1928   VOID
1929   );
1930
1931 //
1932 //  Shell mode switch support
1933 //
1934 EFI_STATUS
1935 SEnvGetShellMode (
1936   OUT CHAR16       **Mode
1937   );
1938
1939 #endif // _SHELLE_H_