// /**
//
// (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
// Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Module Name:
//
// UefiShellLevel2CommandsLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell 2.0 level 2 commands
//
//
// **/

/=#

#langdef   en-US "english"

#string STR_GEN_NO_MEM            #language en-US "%H%s%N: Memory is not available.\r\n"
#string STR_GEN_TOO_MANY          #language en-US "%H%s%N: Too many arguments.\r\n"
#string STR_GEN_TOO_FEW           #language en-US "%H%s%N: Too few arguments.\r\n"
#string STR_GEN_PARAM_INV         #language en-US "%H%s%N: Invalid argument - '%H%s%N'\r\n"
#string STR_GEN_PROBLEM           #language en-US "%H%s%N: Unknown flag - '%H%s%N'\r\n"
#string STR_GEN_PROBLEM_VAL       #language en-US "%H%s%N: Bad value - '%H%s%N' for flag - '%H%s%N'\r\n"
#string STR_GEN_ATTRIBUTE         #language en-US "%H%s%N: Invalid argument - '%H-a%s%N'\r\n"
#string STR_GEN_NO_VALUE          #language en-US "%H%s%N: Missing argument for flag - '%H%s%N'\r\n"
#string STR_GEN_ERR_AD            #language en-US "%H%s%N: Access denied.\r\n"
#string STR_GEN_ERR_FILE          #language en-US "%H%s%N: File '%H%s%N' error - %r\r\n"
#string STR_GEN_ERR_UK            #language en-US "%H%s%N: Status: %r\r\n"
#string STR_GEN_PARAM_CON         #language en-US "%H%s%N: Parameters conflict.\r\n"
#string STR_GEN_PARAM_CONFLICT    #language en-US "%H%s%N: Flags conflict with - '%H%s%N' and '%H%s%N'\r\n"
#string STR_GEN_FILE_OPEN_FAIL    #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
#string STR_GEN_FILE_CLOSE_FAIL   #language en-US "%H%s%N: Cannot close file - '%H%s%N'\r\n"
#string STR_GEN_FILE_AD           #language en-US "%H%s%N: File access error - '%H%s%N'\r\n"
#string STR_GEN_FILE_NF           #language en-US "%H%s%N: File not found - '%H%s%N'\r\n"
#string STR_GEN_CRLF              #language en-US "\r\n"
#string STR_GEN_NO_CWD            #language en-US "%H%s%N: Current directory not specified.\r\n"
#string STR_GEN_NO_FILES          #language en-US "%H%s%N: No matching files were found.\r\n"
#string STR_GEN_DIR_NF            #language en-US "%H%s%N: Directory not found - '%H%s%N'\r\n"
#string STR_GEN_RES_OK            #language en-US "- [ok]\r\n"
#string STR_GEN_NOT_DIR           #language en-US "%H%s%N: '%H%s%N' is not a directory.\r\n"
#string STR_GEN_NOT_FILE          #language en-US "%H%s%N: '%H%s%N' is not a file.\r\n"
#string STR_GEN_SFO_HEADER        #language en-US "ShellCommand,"%s"\r\n"
#string STR_GEN_MARG_ERROR        #language en-US "%H%s%N: The destination '%H%s%N' is ambiguous.\r\n"
#string STR_GEN_FILE_ERROR        #language en-US "%H%s%N: The destination is an existing file '%H%s%N'.\r\n"
#string STR_GEN_UEFI_FUNC_ERROR   #language en-US "%H%s%N: UEFI function '%H%s%N' returned an incorrect value for: %s (%x).\r\n"
#string STR_GEN_UEFI_FUNC_WARN    #language en-US "%H%s%N: UEFI function '%H%s%N' returned: %r\r\n"
#string STR_GEN_DEST_EXIST_OVR    #language en-US "Destination file already exists.  Overwrite? %BY%Nes, %BN%No, %BA%Nll, %BC%Nancel "
#string STR_GEN_CPY_FAIL          #language en-US "%H%s%N: Copy failure: insufficient capacity on destination media.\r\n"
#string STR_GEN_CPY_READ_ERROR    #language en-US "%H%s%N: reading '%B%s%N': IO Error \r\n"
#string STR_GEN_CPY_WRITE_ERROR   #language en-US "%H%s%N: writing '%B%s%N': IO Error \r\n"
#string STR_GEN_OUT_MEM           #language en-US "%H%s%N: Memory allocation was not successful.\r\n"

#string STR_SET_DISP              #language en-US "%V%8s %N= %H%s%N\r\n"
#string STR_SET_NF                #language en-US "%H%s%N: Environment Variable '%H%s%N' not defined.\r\n"
#string STR_SET_ND                #language en-US "%H%s%N: Environment Variable '%H%s%N' could not be deleted.\r\n"
#string STR_SET_ERROR_SET         #language en-US "%H%s%N: Unable to set %H%s%N\r\n"

#string STR_CD_PRINT              #language en-US "%s\r\n"
#string STR_CD_NF                 #language en-US "%H%s%N: No mapping found.\r\n"

#string STR_MAP_NF                #language en-US "%H%s%N: Cannot find mapped device - '%H%s%N'\r\n"
#string STR_MAP_NOF               #language en-US "%H%s%N: No mappable target found - '%H%s%N'\r\n"
#string STR_MAP_SFO_MAPPINGS      #language en-US "Mappings,"%s","%s","%s"\r\n"
#string STR_MAP_HEADER            #language en-US "%EMapping table%N\r\n"
#string STR_MAP_ENTRY             #language en-US "%E%10s%N %HAlias(s):%N%s\r\n          %s\r\n"
#string STR_MAP_ENTRY_VERBOSE     #language en-US "         Handle:      [%H%02x%N]\r\n"
                                                  "         Media Type:  %s\r\n"
                                                  "         Removable:   %s\r\n"
                                                  "         Current Dir: %s\r\n"

#string STR_ATTRIB_OUTPUT_LINE    #language en-US "Attrib: %1c%1c%1c%1c%1c %s\r\n"

#string STR_MAP_MEDIA_FLOPPY      #language en-US "Floppy"
#string STR_MAP_MEDIA_UNKNOWN     #language en-US "Unknown"
#string STR_MAP_MEDIA_HARDDISK    #language en-US "HardDisk"
#string STR_MAP_MEDIA_CDROM       #language en-US "CD-Rom"

#string STR_MKDIR_ALREADY         #language en-US "Directory '%B%s%N' already exists.\r\n"
#string STR_MKDIR_CREATEFAIL      #language en-US "Directory '%B%s%N' unable to create.\r\n"

#string STR_DATE_FORMAT           #language en-US "%02d/%02d/%04d\r\n"
#string STR_DATE_SFO_FORMAT       #language en-US "Date,"%02d","%02d","%04d"\r\n"

#string STR_TIME_FORMAT           #language en-US "%02d:%02d:%02d (UTC%1s%02d:%02d)"
#string STR_TIME_FORMAT_LOCAL     #language en-US "%02d:%02d:%02d (LOCAL)"
#string STR_TIME_DST0             #language en-US " DST: Not Affected\r\n"
#string STR_TIME_DST1             #language en-US " DST: Affected\r\n"
#string STR_TIME_DST2             #language en-US " DST: Adjusted\r\n"
#string STR_TIME_DST3             #language en-US " DST: Affected and Adjusted\r\n"

#string STR_TIMEZONE_M12          #language en-US "UTC-12:00, International Date Line West\r\n"
#string STR_TIMEZONE_M11          #language en-US "UTC-11:00, Midway Island, Samoa\r\n"
#string STR_TIMEZONE_M10          #language en-US "UTC-10:00, Hawaii\r\n"
#string STR_TIMEZONE_M9           #language en-US "UTC-09:00, Alaska\r\n"
#string STR_TIMEZONE_M8           #language en-US "UTC-08:00, Pacific Time(US & Canada), Tijuana, Portland\r\n"
#string STR_TIMEZONE_M7           #language en-US "UTC-07:00, Arizona, Chihuahua, La Paz, Mazatlan, Mountain Time (US & Canada)\r\n"
#string STR_TIMEZONE_M6           #language en-US "UTC-06:00, Central America, Central Time(US & Canada)\r\n"
#string STR_TIMEZONE_M5           #language en-US "UTC-05:00, Bogota, Lima, Quito, Eastern Time(US & Canada)\r\n"
#string STR_TIMEZONE_M430         #language en-US "UTC-04:30, Caracas\r\n"
#string STR_TIMEZONE_M4           #language en-US "UTC-04:00, Atlantic Time(Canada), Caracas, Santiago, Georgetown\r\n"
#string STR_TIMEZONE_M330         #language en-US "UTC-03:30, Newfoundland\r\n"
#string STR_TIMEZONE_M3           #language en-US "UTC-03:00, Brasilia, Buenos Aires, Greenland\r\n"
#string STR_TIMEZONE_M2           #language en-US "UTC-02:00, Mid-Atlantic\r\n"
#string STR_TIMEZONE_M1           #language en-US "UTC-01:00, Azores, Cape Verde Is.\r\n"
#string STR_TIMEZONE_0            #language en-US "UTC      , Greenwich Mean Time, Casablanca, Monrovia, Dublin, London\r\n"
#string STR_TIMEZONE_P1           #language en-US "UTC+01:00, Amsterdam, Berlin, Bern, Rome, Paris, West Central Africa\r\n"
#string STR_TIMEZONE_P2           #language en-US "UTC+02:00, Athens, Bucharest, Cairo, Jerusalem\r\n"
#string STR_TIMEZONE_P3           #language en-US "UTC+03:00, Baghdad, Kuwait, Riyadh, Moscow, Nairobi, Istanbul\r\n"
#string STR_TIMEZONE_P330         #language en-US "UTC+03:30, Tehran\r\n"
#string STR_TIMEZONE_P4           #language en-US "UTC+04:00, Abu Dhabi, Muscat, Baku, Tbilisi, Yerevan\r\n"
#string STR_TIMEZONE_P430         #language en-US "UTC+04:30, Kabul\r\n"
#string STR_TIMEZONE_P5           #language en-US "UTC+05:00, Ekaterinburg, Islamabad, Karachi, Tashkent\r\n"
#string STR_TIMEZONE_P530         #language en-US "UTC+05:30, Chennai, Kolkata, Mumbai, New Delhi\r\n"
#string STR_TIMEZONE_P545         #language en-US "UTC+05:45, Kathmandu\r\n"
#string STR_TIMEZONE_P6           #language en-US "UTC+06:00, Almaty, Astana, Dhaka, Sri Jayawardenepura\r\n"
#string STR_TIMEZONE_P630         #language en-US "UTC+06:30, Rangoon\r\n"
#string STR_TIMEZONE_P7           #language en-US "UTC+07:00, Bangkok, Hanio, Jakarta, Krasnoyarsk, Novosibirsk\r\n"
#string STR_TIMEZONE_P8           #language en-US "UTC+08:00, Beijing, Chongqing, Hong Kong, Urumqi, Taipei, Perth\r\n"
#string STR_TIMEZONE_P9           #language en-US "UTC+09:00, Osaka, Sapporo, Tokyo, Seoul, Yakutsk\r\n"
#string STR_TIMEZONE_P930         #language en-US "UTC+09:30, Adelaide, Darwin\r\n"
#string STR_TIMEZONE_P10          #language en-US "UTC+10:00, Canberra, Melbourne, Sydney, Guam, Hobart, Vladivostok\r\n"
#string STR_TIMEZONE_P11          #language en-US "UTC+11:00, Magadan, Solomon Is., New Caledonia\r\n"
#string STR_TIMEZONE_P12          #language en-US "UTC+12:00, Auckland, Wellington, Fiji, Kamchatka, Marshall Is.\r\n"
#string STR_TIMEZONE_P13          #language en-US "UTC+13:00, Nuku'alofa\r\n"
#string STR_TIMEZONE_P14          #language en-US "UTC+14:00, Line Islands\r\n"
#string STR_TIMEZONE_LOCAL        #language en-US "LOCAL    , Local Time\r\n"
#string STR_TIMEZONE_SIMPLE       #language en-US "UTC%1s%02d:%02d\r\n"
#string STR_TIMEZONE_SIMPLE_LOCAL #language en-US "LOCAL\r\n"
#string STR_TIMEZONE_NI           #language en-US "No additional information known."

#string STR_LOAD_NOT_IMAGE        #language en-US "Image '%s' is not an image.\r\n"
#string STR_LOAD_NOT_DRIVER       #language en-US "Image '%s' is not a driver.\r\n"
#string STR_LOAD_LOADED           #language en-US "Image '%s' loaded at %x - %r\r\n"
#string STR_LOAD_ERROR            #language en-US "Image '%s' error in StartImage: %r\r\n"

#string STR_LS_LINE_START_ALL     #language en-US "%t %5s %1c % ,L11d  "
#string STR_LS_LINE_END_FILE      #language en-US "%s\r\n"
#string STR_LS_LINE_END_EXE       #language en-US "%V%s%N\r\n"
#string STR_LS_LINE_END_DIR       #language en-US "%B%s%N\r\n"
#string STR_LS_FOOTER_LINE        #language en-US "% ,L11d File(s) % ,L11d bytes\r\n% ,L11d Dir(s)\r\n"
#string STR_LS_HEADER_LINE1       #language en-US "Directory of: %H%s%N\r\n"
#string STR_LS_FILE_NOT_FOUND     #language en-US "%H%s%N: File Not Found - '%H%s%N'\r\n"
#string STR_LS_SFO_VOLINFO        #language en-US "VolumeInfo,"%s","%Ld","%5s","%Ld","%Ld"\r\n"
#string STR_LS_SFO_FILEINFO       #language en-US "FileInfo,"%s","%Ld","%Ld","%s%s%s%s%s","%02d:%02d:%02d","%02d.%02d.%04d","%02d:%02d:%02d","%02d.%02d.%04d","%02d:%02d:%02d","%02d.%02d.%04d"\r\n"

#string STR_VOL_VOLINFO           #language en-US "Volume %s (%s)\r\n"
                                                  "%Ld bytes total disk space\r\n"
                                                  "%Ld bytes available on disk\r\n"
                                                  "%d bytes in each allocation unit\r\n"

#string STR_RM_LOG_DELETE_CONF    #language en-US "Remove Subtree '%B%s%N' [y/n]?"
#string STR_RM_LOG_DELETE         #language en-US "Deleting '%B%s%N'\r\n"
#string STR_RM_LOG_DELETE_ERR     #language en-US "Delete error: %r\r\n"
#string STR_RM_LOG_DELETE_ERR2    #language en-US "Delete error.  Couldn't open file: %r\r\n"
#string STR_RM_LOG_DELETE_ERR3    #language en-US "Delete error.  Invalid target '%B%s%N'\r\n"
#string STR_RM_LOG_DELETE_COMP    #language en-US "Delete successful.\r\n"
#string STR_RM_LOG_DETELE_RO      #language en-US "%H%s%N: '%H%s%N' is read-only\r\n"

#string STR_MV_OUTPUT             #language en-US "Moving %s -> %s\r\n"
#string STR_MV_INV_SUB            #language en-US "Cannot move a directory into itself or its subdirectory.\r\n"
#string STR_MV_INV_RO             #language en-US "Cannot move to or from a read-only file or directory '%B%s%N'\r\n"
#string STR_MV_INV_CWD            #language en-US "Cannot move current working directory or its subdirectory.\r\n"

#string STR_CP_OUTPUT             #language en-US "Copying %s -> %s\r\n"
#string STR_CP_ERROR              #language en-US "%H%s%N: Could not copy - '%H%s%N'\r\n"
#string STR_CP_DIR_REQ            #language en-US "%H%s%N: Copying a directory requires -r.\r\n"
#string STR_CP_DIR_WNF            #language en-US "%H%s%N: The specified path does not exist - '%H%s%N'\r\n"
#string STR_CP_SD_SAME            #language en-US "%H%s%N: The source and destination are the same.\r\n"
#string STR_CP_SD_PARENT          #language en-US "%H%s%N: The destination is a parent of the source.\r\n"
#string STR_CP_DEST_ERROR         #language en-US "%H%s%N: The destination is read-only.\r\n"
#string STR_CP_DEST_OPEN_FAIL     #language en-US "%H%s%N: The destination file '%B%s%N' failed to open with create.\r\n"
#string STR_CP_DEST_DIR_FAIL      #language en-US "%H%s%N: The destination directory '%B%s%N' could not be created.\r\n"
#string STR_CP_SRC_OPEN_FAIL     #language en-US "%H%s%N: The source file '%B%s%N' failed to open with read.\r\n"

#string STR_GET_HELP_ATTRIB       #language en-US ""
".TH attrib 0 "Displays or modifies the attributes of files or directories."\r\n"
".SH NAME\r\n"
"Displays or modifies the attributes of files or directories.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"ATTRIB [+a|-a] [+s|-s] [+h|-h] [+r|-r] [file...] [directory...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  +a|-a     - Sets or clears the 'archive' attribute.\r\n"
"  +s|-s     - Sets or clears the 'system' attribute.\r\n"
"  +h|-h     - Sets or clears the 'hidden' attribute.\r\n"
"  +r|-r     - Sets or clears the 'read-only' attribute.\r\n"
"  file      - Specifies the file name (wild cards are permitted).\r\n"
"  directory - Specifies the directory name (wildcards are permitted).\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. Four attribute types are supported in the UEFI file system:\r\n"
"     - Archive [A]\r\n"
"     - System [S]\r\n"
"     - Hidden [H]\r\n"
"     - Read only [R]\r\n"
"  2. If a file (in general meaning) is a directory, then it is also shown\r\n"
"     to have the attribute [D].\r\n"
"  3. If any file in the file list that is specified \r\n"
"     does not exist, attrib will continue processing the remaining files\r\n"
"     while reporting the error.\r\n"
"  4. If no attributes parameters are specified, the current attributes of\r\n"
"     the specified files or directories are displayed.\r\n"
"  5. If no files or directories are specified, the command applies to\r\n"
"     all files and sub-directories within the current directory.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the attributes of a directory:\r\n"
"    fs0:\> attrib fs0:\ \r\n"
" \r\n"
"  * To display the attributes of all files and sub-directories in the current\r\n"
"    directory:\r\n"
"    fs0:\> attrib *\r\n"
" \r\n"
"  * To add the system attribute to all files with extension '.efi':\r\n"
"    fs0:\> attrib +s *.efi\r\n"
" \r\n"
"  * To remove the read-only attribute from all files with extension '.inf':\r\n"
"    fs0:\> attrib -r *.inf\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_NOT_FOUND           The requested file was not found.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_WRITE_PROTECTED     The media that the action was to take place on is\r\n"
"                            write-protected.\r\n"

#string STR_GET_HELP_CD           #language en-US ""
".TH cd 0 "Displays or changes the current directory."\r\n"
".SH NAME\r\n"
"Displays or changes the current directory.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"CD [path]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  path - Specifies the relative or absolute directory path.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command changes the current working directory that is used by the\r\n"
"     UEFI Shell environment. If a file system mapping is specified, then the\r\n"
"     current working directory is changed for that device. Otherwise, the\r\n"
"     current working directory is changed for the current device.\r\n"
"  2. If path is not present, then the current working directory (including\r\n"
"     file system mapping) is displayed to standard out.\r\n"
"  3. The table below describes the conventions that are used to refer to the\r\n"
"     directory, its parent, and the root directory in the UEFI Shell\r\n"
"     environment.\r\n"
"     Convention  Description\r\n"
"      '.'        Refers to the current directory.\r\n"
"      '..'       Refers to the directory's parent.\r\n"
"      '\\\'        Refers to the root of the current file system.\r\n"
"  4. The current working directory is maintained in the environment\r\n"
"     variable %cwd%.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To change the current file system to the mapped fs0 file system:\r\n"
"    Shell> fs0:\r\n"
" \r\n"
"  * To change the current directory to subdirectory 'efi':\r\n"
"    fs0:\> cd efi\r\n"
" \r\n"
"  * To change the current directory to the parent directory (fs0:\):\r\n"
"    fs0:\efi\> cd ..\r\n"
" \r\n"
"  * To change the current directory to 'fs0:\efi\Tools':\r\n"
"    fs0:\> cd efi\Tools\r\n"
" \r\n"
"  * To change the current directory to the root of the current fs (fs0):\r\n"
"    fs0:\efi\Tools\> cd \ \r\n"
" \r\n"
"  * To move between volumes and maintain the current path, and then copy\r\n"
"    all of files in fs0:\efi\Tools into the fs1:\Tmp directory:\r\n"
"    fs0:\> cd \efi\Tools\r\n"
"    fs0:\efi\Tools\> fs1:\r\n"
"    fs1:\> cd Tmp\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_CP           #language en-US ""
".TH cp 0 "Copies files or directories."\r\n"
".SH NAME\r\n"
"Copies one or more files or directories to another location.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"CP [-r] [-q] src [src...] [dst]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -r  - Makes a recursive copy.\r\n"
"  -q  - Makes a quiet copy (without a prompt).\r\n"
"  src - Specifies a source file/directory name (wildcards are permitted).\r\n"
"  dst - Specifies a destination file/directory name (wildcards are not permitted). \r\n"
"        If more than one directory is specified, the last directory is\r\n"
"        assumed to be the destination.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. '-r' must be specified if src is a directory. If '-r' is specified,\r\n"
"     the source directory is recursively copied to the destination.\r\n"
"     'src' itself is copied.\r\n"
"  2. If a destination is not specified, the current working directory is\r\n"
"     assumed to be the destination.\r\n"
"  3. 'CP -r src1 src2 dst' copies all files and subdirectories in 'src1' and\r\n"
"     'src2' to the destination 'dst'. 'src1' and 'src2' themselves are also\r\n"
"     copied. The 'dst' parameter is interpreted as a directory.\r\n"
"  4. Copying a directory or file to itself is not allowed.\r\n"
"  5. If an error occurs, this command exits immediately and the remaining files or\r\n"
"     directories are not copied.\r\n"
"  6. When 'cp' is executed with a script file, it always performs quiet\r\n"
"     copying, regardless of whether the '-q' option is specified.\r\n"
"  7. If you are copying multiple files, the destination must be an existing\r\n"
"     directory.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the contents of the current directory:\r\n"
"    fs0:\> ls\r\n"
" \r\n"
"  * To copy a file in the same directory and change the file name:\r\n"
"    fs0:\> cp temp.txt readme.txt\r\n"
" \r\n"
"  * To copy multiple files to another directory:\r\n"
"    fs0:\> cp temp.txt isaBus.efi \Test\r\n"
" \r\n"
"  * To copy multiple directories recursively to another directory:\r\n"
"    fs0:\> cp -r test1 test2 boot \Test\r\n"
" \r\n"
"  * To see the results of the above operations:\r\n"
"    fs0:\> ls \Test\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly \r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_OUT_OF_RESOURCES    There was insufficient space to save the \r\n"
"                            requested file at the destination.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security \r\n"
"                            violation.\r\n"
"  SHELL_WRITE_PROTECTED     An attempt was made to create a file on media that\r\n"
"                            was write-protected.\r\n"

#string STR_GET_HELP_MAP          #language en-US ""
".TH map 0 "Displays or defines file system mappings"\r\n"
".SH NAME\r\n"
"Displays or defines file system mappings.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"MAP [-d <sname>]\r\n"
"MAP [[-r][-v][-c][-f][-u][-t <type[,type...]>][sname]]\r\n"
"MAP [sname handle | mapping]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -d      - Deletes a file system mapping.\r\n"
"  -r      - Resets file system mappings to default values.\r\n"
"  -u      - Adds file system mappings for newly-installed devices and\r\n"
"            removes mappings for uninstalled devices. This does not change\r\n"
"            the mappings of existing devices and preserves user-defined mappings.\r\n"
"  -v      - Displays verbose information about all file system mappings.\r\n"
"  -c      - Displays the consistent mappings.\r\n"
"  -f      - Displays the normal mappings (not the consistent mappings).\r\n"
"  -t      - Displays the device mappings, filtered according to the device type.\r\n"
"            Supported types are:\r\n"
"              fp - Floppy\r\n"
"              hd - Hard Disk\r\n"
"              cd - CD-ROM\r\n"
"            Types can be combined by putting a comma between two types. Spaces\r\n"
"            are not allowed between types.\r\n"
"  -sfo    - Displays information in Standard-Format Output.\r\n"
"  sname   - Specifies a mapping name.\r\n"
"  handle  - Specifies the number of a handle. Use the same value that is\r\n"
"            displayed by the 'dh' command.\r\n"
"  mapping - Specifies a new mapping name to assign to a device.\r\n"
"            This value must end with a ':'.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command creates a mapping between a user-defined name and a device.\r\n"
"     The most common use of this command is to create a mapped name for\r\n"
"     devices that support a file system protocol. After these mappings are\r\n"
"     created, the names can be used with all the file manipulation commands.\r\n"
"  2. The UEFI Shell environment creates default mappings for all of the\r\n"
"     devices that support a recognized file system.\r\n"
"  3. This command can be used to create additional mappings, or \r\n"
"     when used with the -d option, to delete an existing mapping. If it is\r\n"
"     used without any parameters, all of the current mappings are listed.\r\n"
"     If the -v option is used, the mappings are shown with additional\r\n"
"     information about each device.\r\n"
"  4. The -r option is used to reset all the default mappings in a system,\r\n"
"     which is useful if the system configuration has changed since the\r\n"
"     last boot.\r\n"
"  5. The -u option adds mappings for newly-installed devices and removes\r\n"
"     mappings for uninstalled devices without changing the mappings of\r\n"
"     existing devices. User-defined mappings are also preserved. A mapping\r\n"
"     history is saved, which preserves the original mapping name for\r\n"
"     a device with a specific device path. The current directory is also\r\n"
"     preserved if the current device is not changed.\r\n"
"  6. Each device in the system has a consistent mapping. If the hardware\r\n"
"     configuration has not changed, the device's consistent mappings do not\r\n"
"     change. If two or more machines have the same hardware configurations,\r\n"
"     the device's consistent mapping remains the same. Use the -c option to\r\n"
"     list all the consistent mappings in the system.\r\n"
"  7. The mapping value must consist of digits and characters. Other\r\n"
"     characters are illegal.\r\n"
"  8. This command support wildcards. You can use the wildcards to delete\r\n"
"     or show the mapping. However, when you assign the mapping, wildcards\r\n"
"     are forbidden.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display verbose mapping table information:\r\n"
"    Shell> map -v\r\n"
" \r\n"
"  * To assign a different name to fs0:\r\n"
"    Shell> map floppy fs0:\r\n"
" \r\n"
"  * To operate with the mapped name:\r\n"
"    Shell> floppy:\r\n"
" \r\n"
"  * To delete a mapped name:\r\n"
"    Shell> map -d floppy:\r\n"
" \r\n"
"  * To display all the mapped names starting with 'f': \r\n"
"    Shell> map f* \r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_MKDIR        #language en-US ""
".TH mkdir 0 "Creates directories."\r\n"
".SH NAME\r\n"
"Creates one or more new directories.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"MKDIR dir [dir...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  dir - Specifies the name of a directory or directories to create.\r\n"
"        (Wildcards are not allowed)\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. Mkdir can create one or more new directories.\r\n"
"  2. If dir includes nested directories, then parent directories will be\r\n"
"     created before child directories.\r\n"
"  3. If the directory already exists, mkdir will exit with an error.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To create a new directory:\r\n"
"    fs0:\> mkdir rafter\r\n"
" \r\n"
"  * To create multiple directories:\r\n"
"    fs0:\> mkdir temp1 temp2\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly \r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_OUT_OF_RESOURCES    There was insufficient space on the destination \r\n"
"                            to create the requested directory.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security \r\n"
"                            violation.\r\n"
"  SHELL_WRITE_PROTECTED     An attempt was made to create a directory when the\r\n"
"                            target media was write-protected.\r\n"

#string STR_GET_HELP_MV           #language en-US ""
".TH mv 0 "Moves files."\r\n"
".SH NAME\r\n"
"Moves one or more files to a destination within or between file systems.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"MV src [src...] [dst]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  src - Specifies a source file/directory name (wildcards are permitted).\r\n"
"  dst - Specifies a destination file/directory name (wildcards are permitted).\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command moves one or more files to a destination within or between\r\n"
"     file systems.\r\n"
"  2. If the destination is an existing directory, the sources are moved\r\n"
"     into that directory. You cannot move the sources to a non-existing\r\n"
"     directory.\r\n"
"  3. If a destination is not specified, the current directory is assumed to be\r\n"
"     the destination. If there is more than one argument on the command line,\r\n"
"     the last one is assumed to be the destination.\r\n"
"  4. Attempting to move a read-only file/directory results in an error.\r\n"
"     Moving a directory that contains read-only files is allowed.\r\n"
"  5. You cannot move a directory into itself or its subdirectories.\r\n"
"  6. You cannot move a directory if the current working directory is itself or\r\n"
"     its subdirectories.\r\n"
"  7. If an error occurs, the remaining files or directories are still be\r\n"
"     moved.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To rename a file:\r\n"
"    fs0:\> mv IsaBus.efi Bus.efi\r\n"
" \r\n"
"  * To move a directory to the current directory:\r\n"
"    fs0:\> mkdir Test1\Temp\r\n"
"    fs0:\> mv Test1\Temp\r\n"
" \r\n"
"  * To rename a directory:\r\n"
"    fs0:\> mv efi efi1.1\r\n"
" \r\n"
"  * To move multiple directories at a time:\r\n"
"    fs0:\> mv Test1 Test2 Test\r\n"
" \r\n"
"  * To attempt moving a read-only directory, which results in a failure:\r\n"
"    fs0:\Test> attrib +r Temp1\r\n"
"    DA  R fs0:\Test\Temp1\r\n"
"    fs0:\Test> mv Temp1 Temp2\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_NOT_FOUND           The source file was not able to be found.\r\n"
"  SHELL_OUT_OF_RESOURCES    There was insufficient free space to move the\r\n"
"                            requested file to its destination.\r\n"
"  SHELL_WRITE_PROTECTED     An attempt was made to create a file on media that\r\n"
"                            was write-protected.\r\n"

#string STR_GET_HELP_PARSE        #language en-US ""
".TH parse 0 "Parses standard format output files."\r\n"
".SH NAME\r\n"
"Retrieves a value from a standard format output file.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"PARSE filename tablename column [-i <Instance>] [-s <Instance>]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  filename      - Specifies a source file name.\r\n"
"  tablename     - Specifies the name of the table to be parsed.\r\n"
"  column        - Specifies the one-based column index to use to determine which value\r\n"
"                  from a particular record to parse.\r\n"
"  -i <Instance> - Specifies an instance number to use to start parsing the ShellCommand table,\r\n"
"                  and then the specified tablename. If not specified, all instances are returned.\r\n"
"  -s <Instance> - Specifies an instance number to use to start parsing the ShellCommand\r\n"
"                  table. If not present, then 1 is assumed.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command enables you to parse data from a file that has been output\r\n"
"     using the -sfo parameter.\r\n"
"  2. Since the standard formatted output has a well known means of parsing,\r\n"
"     this command is intended to provide an easy way of enabling\r\n"
"     scripts to consume retrieved data from such constructed output files, and\r\n"
"     use it in the logic of scripts written for the UEFI shell.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * The following data is contained in a temporary file (temp.txt):\r\n"
"    ShellCommand,"ls"\r\n"
"    VolumeInfo,"MikesVolume","400000000","FALSE","32000000","16000000"\r\n"
"    FileInfo,"FS0:\efi\\boot\winloader.efi","45670","45900","arsh","08:30:12","01.08.2013","00:00:00","01.08.2013","08:30:12","01.08.2013"\r\n"
"    FileInfo,"FS0:\efi\\boot\mikesfile.txt","1250","1280","a","08:30:12","01.08.2013","00:00:00","01.08.2013","08:30:12","01.08.2013"\r\n"
"    FileInfo,"FS0:\efi\\boot\\readme.txt","795","900","a","08:30:12","01.08.2013","00:00:00","01.08.2013","08:30:12","01.08.2013"\r\n"
" \r\n"
"  * To display VolumeInfo column 2 in temp.txt:\r\n"
"    fs0:\> parse temp.txt VolumeInfo 2\r\n"
"    MikesVolume\r\n"
" \r\n"
"  * To display FileInfo column 3 in temp.txt, starting with instance 3:\r\n"
"    fs0:\> parse temp.txt FileInfo 3 -i 3\r\n"
"    795\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_NOT_FOUND           The source file was not able to be found.\r\n"

#string STR_GET_HELP_RESET        #language en-US ""
".TH reset 0 "Reset the system."\r\n"
".SH NAME\r\n"
"Resets the system.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"RESET [-w [string]]\r\n"
"RESET [-s [string]]\r\n"
"RESET [-c [string]]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -s     - Performs a shutdown.\r\n"
"  -w     - Performs a warm boot.\r\n"
"  -c     - Performs a cold boot.\r\n"
"  string - Describes a reason for the reset.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command resets the system.\r\n"
"  2. The default is to perform a cold reset unless the -w parameter is\r\n"
"     specified.\r\n"
"  3. If a reset string is specified, it is passed into the Reset() \r\n"
"     function, and the system records the reason for the system reset.\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed in parameters was incorrectly \r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_RM           #language en-US ""
".TH rm 0 "Deletes one or more files or directories."\r\n"
".SH NAME\r\n"
"Deletes one or more files or directories.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"RM [-q] file/directory [file/directory ...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -q        - Specifies quiet mode. Does not prompt for a confirmation.\r\n"
"  file      - Specifies a file name (wildcards are permitted).\r\n"
"  directory - Specifies a directory name (wildcards are permitted).\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command deletes one or more files or directories.\r\n"
"  2. If the target is a directory, it deletes the directory, including all\r\n"
"     its subdirectories.\r\n"
"  3. Redirecting a file whose parent directory (or the file\r\n"
"     itself) is being deleted is not allowed.\r\n"
"  4. Removing a read-only file/directory results in a failure.\r\n"
"  5. Removing a directory containing read-only file(s) results in\r\n"
"     a failure. If an error occurs, the command exits immediately and stops\r\n"
"     removing files/directories.\r\n"
"  6. You cannot remove a directory when the current directory is itself or its\r\n"
"     subdirectory. If a file contains wildcards, you are not prompted for\r\n"
"     confirmation.\r\n"
"  7. The root directory cannot be removed.\r\n"
"  8. The current directory or its ancestor directories cannot be removed.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To remove multiple directories at a time:\r\n"
"    fs0:\> rm Test\Temp1 Temp2\r\n"
" \r\n"
"  * To remove multiple directories with wildcards:\r\n"
"    fs0:\> rm Test\Temp*\r\n"
" \r\n"
"  * To attempt removing a directory that contains a read-only file,\r\n"
"    which results in a failure:\r\n"
"    fs0:\> attrib +r Test\Temp1\readme.txt\r\n"
"    A R fs0:\Test\Temp1\readme.txt\r\n"
"    fs0:\> rm Test\Temp1\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_NOT_FOUND           The source file was not able to be found.\r\n"
"  SHELL_WRITE_PROTECTED     The target was write protected.\r\n"

#string STR_GET_HELP_SET          #language en-US ""
".TH set 0 "Displays or modifies UEFI Shell environment variables."\r\n"
".SH NAME\r\n"
"Displays or modifies UEFI Shell environment variables.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"SET [-v] [sname [value]]\r\n"
"SET [-d <sname>]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -d    - Deletes the environment variable.\r\n"
"  -v    - Displays or modifies a volatile variable.\r\n"
"  sname - Specifies an environment variable name.\r\n"
"  value - Specifies an environment variable value.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command is used to maintain the UEFI Shell environment variables.\r\n"
"     This command can do the following:\r\n"
"       - Display environment variables.\r\n"
"       - Create new environment variables.\r\n"
"       - Change the value of existing environment variables.\r\n"
"       - Delete environment variables.\r\n"
"  2. This command sets an environment variable to a specified \r\n"
"     value. You can use it to create a new environment\r\n"
"     variable or to modify an existing environment variable.\r\n"
"  3. If used without any parameters, all the environment variables\r\n"
"     are displayed.\r\n"
"  4. If used with the -d option, the environment variable that\r\n"
"     is specified by sname is deleted.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To add an environment variable:\r\n"
"    Shell> set DiagnosticPath fs0:\efi\diag;fs1:\efi\diag\r\n"
" \r\n"
"  * To display environment variables:\r\n"
"    Shell> set\r\n"
" \r\n"
"  * To delete an environment variable:\r\n"
"    Shell> set -d diagnosticpath\r\n"
" \r\n"
"  * To change an environment variable:\r\n"
"    fs0:\> set src efi\r\n"
"    fs0:\> set src efi1.1\r\n"
" \r\n"
"  * To append an environment variable:\r\n"
"    Shell> set path %path%;fs0:\efi\Tools;fs0:\efi\boot;fs0:\\r\n"
" \r\n"
"  * To set a volatile variable that will disappear at the next boot:\r\n"
"    Shell> set -v EFI_SOURCE c:\project\EFI1.1\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_OUT_OF_RESOURCES    A request to set a variable in a non-volatile \r\n"
"                            fashion could not be completed. The resulting \r\n"
"                            non-volatile request has been converted into a \r\n"
"                            volatile request.\r\n"

#string STR_GET_HELP_DATE         #language en-US ""
".TH date 0 "Displays and sets the current date for the system."\r\n"
".SH NAME\r\n"
"Displays and sets the current date for the system.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"DATE [mm/dd/[yy]yy][-sfo]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -sfo    - Displays information in Standard-Format Output.\r\n"
"  mm      - Specifies the month of the date to be set. (1-12)\r\n"
"  dd      - Specifies the day of the date to be set (1-31)\r\n"
"  yy/yyyy - Specifies the year of the date to be set. If only two digits,\r\n"
"            then enter 9x = 199x. Otherwise enter 20xx.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays and/or sets the current date for the system.\r\n"
"     If no parameters are used, it shows the current date. If a valid month,\r\n"
"     day, and year are specified, the system's date is updated.\r\n"
"     The following rules apply:\r\n"
"       - Except for numeric characters and /, all other characters in the\r\n"
"         argument are invalid.\r\n"
"       - The Shell reports an error if the number is in the wrong\r\n"
"         month/date/year range.\r\n"
"       - A space before or after the numeric character is not allowed. Inserting\r\n"
"         a space into the number is invalid.\r\n"
"       - Repeated zeros are allowed before the number. For example:\r\n"
"           Shell > date 0000008/000004/000097\r\n"
"           Shell > date\r\n"
"           08/04/2097\r\n"
"           Shell >\r\n"
"       - The year range must be greater than or equal to 1998.\r\n"
"       - Two numeric characters indicate the year. Numbers below 98 are\r\n"
"         regarded as 20xx, and numbers equal to or above 98 are regarded as\r\n"
"         19xx. 00 means 2000. For example:\r\n"
"           Shell > date 8/4/97\r\n"
"           Shell > date\r\n"
"           08/04/2097\r\n"
"           Shell >\r\n"
"           Shell > date 8/4/98\r\n"
"           Shell > date\r\n"
"           08/04/1998\r\n"
"           Shell >\r\n"
"  2. The range of valid years is from 1998-2099.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the current date in the system:\r\n"
"    fs0:\> date\r\n"
" \r\n"
"  * To set the date with long year format:\r\n"
"    fs0:\> date 01/01/2050\r\n"
" \r\n"
"  * To set the date with short year format:\r\n"
"    fs0:\> date 06/18/01\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_DEVICE_ERROR        There was a hardware error preventing the\r\n"
"                            completion of this command.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_TIME         #language en-US ""
".TH time 0 "Displays or sets the time for the system."\r\n"
".SH NAME\r\n"
"Displays or sets the current time for the system.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"TIME [hh:mm[:ss]] [-tz tz] [-d dl]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -d  - Sets or displays a daylight savings time value.\r\n"
"  -tz - Specifies a time zone adjustment, measured in minutes offset from UTC. Valid values\r\n"
"        are between -1440 and 1440 or 2047. If not present or set to 2047,\r\n"
"        time is interpreted as local time.\r\n"
"  hh  - Specifies a new hour (0-23) (required).\r\n"
"  mm  - Specifies a new minute (0-59) (required).\r\n"
"  ss  - Specifies a new second (0-59). If not specified, zero is used.\r\n"
"  dl  - Specifies a daylight saving time value to set.\r\n"
"          0 : Time is not affected.\r\n"
"          1 : Time is affected, and has not been adjusted for daylight\r\n"
"              savings.\r\n"
"          3 : Time is affected, and has been adjusted for daylight savings.\r\n"
"        All other values are invalid. If no value follows -d, the\r\n"
"        current daylight savings time is displayed.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays or sets the current time for the system.\r\n"
"     If no parameters are used, it shows the current time. If valid hours, \r\n"
"     minutes, and seconds are provided, the system time is\r\n"
"     updated. Note the following rules:\r\n"
"       - Except for numeric characters and the : character, all other\r\n"
"         characters in the argument are invalid.\r\n"
"       - The Shell reports an error if the number is in the wrong \r\n"
"         hour/minute/second range.\r\n"
"       - Spaces before or after the numeric character and spaces inserted into\r\n"
"         the number are not allowed.\r\n"
"       - Repeated zeros are allowed before the number. For example:\r\n"
"           Shell> time 00000017:000004:0000\r\n"
"           Shell> time\r\n"
"           17:04:00 (UTC+08:00)\r\n"
"  2. The seconds parameter is optional. If none is specified, it is\r\n"
"     set to zero.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display current system time:\r\n"
"    fs0:\> time\r\n"
" \r\n"
"  * To set the system time:\r\n"
"    fs0:\> time 9:51:30\r\n"
" \r\n"
"  * To display the system time, including daylight savings time:\r\n"
"    fs0:\> time -d\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_DEVICE_ERROR        There was a hardware error preventing the\r\n"
"                            completion of this command\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_TIMEZONE     #language en-US ""
".TH timezone 0 "Displays or sets time zone information."\r\n"
".SH NAME\r\n"
"Displays or sets time zone information.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"TIMEZONE [-s hh:mm | -l] [-b] [-f]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -s - Sets the time zone associated with hh:mm offset from UTC.\r\n"
"  -l - Displays a list of all time zones.\r\n"
"  -b - Displays one screen at a time.\r\n"
"  -f - Displays full information for the specified time zone.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays and sets the current time zone for the system.\r\n"
"  2. If no parameters are used, it shows the current time zone.\r\n"
"  3. If a valid hh:mm parameter is provided, the time zone\r\n"
"     information is updated.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display all available time zones:\r\n"
"    Shell> timezone -l\r\n"
" \r\n"
"  * To set the time zone:\r\n"
"    Shell> timezone -s -7:00\r\n"
" \r\n"
"  * To display detailed information for the current time zone:\r\n"
"    Shell> timezone -f\r\n"

#string STR_GET_HELP_LS           #language en-US ""
".TH ls 0 "Lists the contents of a directory or file information."\r\n"
".SH NAME\r\n"
"Lists the contents of a directory or file information.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"LS [-r] [-a[attrib]][-sfo][file]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -r     - Displays recursively (including subdirectories).\r\n"
"  -a     - Displays files with a specified attribute. If \r\n"
"           attribute is not specified, all files are listed. If -a is not\r\n"
"           specified, all non-system and non-hidden files are listed.\r\n"
"  -sfo   - Displays information in Standard-Format Output.\r\n"
"  attrib - Specifies a file attribute list value:\r\n"
"             a - Archive\r\n"
"             s - System\r\n"
"             h - Hidden\r\n"
"             r - Read-only\r\n"
"             d - Directory\r\n"
"  file   - Specifies a name of a file or directory (wildcards are permitted).\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command lists directory contents or file information. If no file\r\n"
"     name or directory name is specified, the current working directory\r\n"
"     is assumed.\r\n"
"  2. The contents of a directory are listed if all of the following are true:\r\n"
"       - If option -r is not specified.\r\n"
"       - If no wildcard characters are specified in the file parameter.\r\n"
"       - If the file specified represents an existing directory.\r\n"
"  3. In all other cases, the command functions as follows:\r\n"
"       - All files/directories that match the specified name are displayed.\r\n"
"       - The -r flag determines whether a recursive search is performed.\r\n"
"       - The option flag -a[attrib] only displays those\r\n"
"         files with the attributes that are specified.\r\n"
"       - If more than one attribute is specified, only the files that have all\r\n"
"         those attributes are listed.\r\n"
"       - If -a is followed by nothing, then all files/directories are\r\n"
"         displayed, regardless of their attributes.\r\n"
"       - If -a itself is not specified, then all files except system and\r\n"
"         hidden files are displayed.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To hide files by adding the hidden or system attribute to them:\r\n"
"    fs0:\> attrib +s +h *.efi\r\n"
" \r\n"
"  * To display all, except the files/directories with 'h' or 's' attribute:\r\n"
"    fs0:\> ls\r\n"
" \r\n"
"  * To display files with all attributes in the current directory:\r\n"
"    fs0:\> ls -a\r\n"
" \r\n"
"  * To display files with read-only attributes in the current directory:\r\n"
"    fs0:\> ls -ar\r\n"
" \r\n"
"  * To display the files with attribute of 's':\r\n"
"    fs0:\> ls -as isabus.efi\r\n"
" \r\n"
"  * To display all in fs0:\efi directory recursively:\r\n"
"    fs0:\> ls -r -a efi\r\n"
" \r\n"
"  * To display files with a specified type in the current directory: \r\n"
"    recursively:\r\n"
"    fs0:\> ls -r -a *.efi -b\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_NOT_FOUND           The requested file or directory was not found.\r\n"

#string STR_GET_HELP_LOAD         #language en-US ""
".TH load 0 "Loads a UEFI driver into memory."\r\n"
".SH NAME\r\n"
"Loads a UEFI driver into memory.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"LOAD [-nc] file [file...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -nc  - Loads the driver, but does not connect the driver.\r\n"
"  File - Specifies a file that contains the image of the UEFI driver (wildcards are\r\n"
"         permitted).\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command loads a driver into memory. It can load multiple files at\r\n"
"     one time. The file name supports wildcards.\r\n"
"  2. If the -nc flag is not specified, this command attempts to connect the\r\n"
"     driver to a proper device. It might also cause previously loaded drivers\r\n"
"     to be connected to their corresponding devices.\r\n"
"  3. Use the 'UNLOAD' command to unload a driver.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To load a driver:\r\n"
"    fs0:\> load Isabus.efi\r\n"
" \r\n"
"  * To load multiple drivers:\r\n"
"    fs0:\> load Isabus.efi IsaSerial.efi\r\n"
" \r\n"
"  * To load multiple drivers using file name wildcards:\r\n"
"    fs0:\> load Isa*.efi\r\n"
" \r\n"
"  * To load a driver without connecting it to a device:\r\n"
"    fs0:\> load -nc IsaBus.efi\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS              The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER    One of the passed-in parameters was incorrectly\r\n"
"                             formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION   This function was not performed due to a security\r\n"
"                             violation.\r\n"
"  SHELL_NOT_FOUND            The requested file was not found.\r\n"

#string STR_GET_HELP_VOL         #language en-US ""
".TH vol 0 "Displays or modifies information about a disk volume."\r\n"
".SH NAME\r\n"
"Displays or modifies information about a disk volume.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"VOL [fs] [-n <VolumeLabel>]\r\n"
"VOL [fs] [-d]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -n          - Displays or modifies a new volume label.\r\n"
"  -d          - Displays or modifies an empty volume label.\r\n"
"  fs          - Specifies the name of the file system.\r\n"
"  VolumeLabel - Specifies a volume label.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The following characters cannot be used in a volume label:\r\n"
"     % ^ * + = [ ] | : ; \" < > ? / . \r\n"
"  2. No spaces are allowed in a volume label.\r\n"
"  3. This command displays the volume information for the specified file\r\n"
"     system. If fs is not specified, the current file system is used.\r\n"
"  4. If -n is specified, the volume label for fs is set to\r\n"
"     VolumeLabel.\r\n"
"  5. The maximum length for volume label is 11 characters.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the volume of the current file system:\r\n"
"    fs0:\> vol\r\n"
" \r\n"
"  * To change the label of fs0:\r\n"
"    Shell> vol fs0 -n help_test\r\n"
" \r\n"
"  * To delete the volume label of fs0:\r\n"
"    fs0:\> vol fs0 -d\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS              The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER    One of the passed-in parameters was incorrectly\r\n"
"                             formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION   This function was not performed due to a security\r\n"
"                             violation.\r\n"
"  SHELL_NOT_FOUND            The target file-system was not found.\r\n"

