// /**
//
// (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved. <BR>
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// Module Name:
//
// UefiShellTftpCommandLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell TFTP command
//
//
// **/

/=#

#langdef   en-US "english"

#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_FILE_OPEN_FAIL     #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
#string STR_GEN_CRLF               #language en-US "\r\n"

#string STR_TFTP_ERR_NO_NIC        #language en-US "No network interface card found.\r\n"
#string STR_TFTP_ERR_NIC_NAME      #language en-US "Failed to get the name of the network interface card number %d - %r\r\n"
#string STR_TFTP_ERR_OPEN_PROTOCOL #language en-US "Unable to open MTFTP4 protocol on '%H%s%N' - %r\r\n"
#string STR_TFTP_ERR_CONFIGURE     #language en-US "Unable to configure MTFTP4 protocol on '%H%s%N' - %r\r\n"
#string STR_TFTP_ERR_FILE_SIZE     #language en-US "Unable to get the size of the file '%H%s%N' on '%H%s%N' - %r\r\n"
#string STR_TFTP_ERR_DOWNLOAD      #language en-US "Unable to download the file '%H%s%N' on '%H%s%N' - %r\r\n"
#string STR_TFTP_ERR_WRITE         #language en-US "Unable to write into file '%H%s%N' - %r\r\n"
#string STR_TFTP_ERR_NIC_NOT_FOUND #language en-US "Network Interface Card '%H%s%N' not found.\r\n"
#string STR_TFTP_DOWNLOADING       #language en-US "Downloading the file '%H%s%N'\r\n"
#string STR_TFTP_STRING            #language en-US "%s"

#string STR_GET_HELP_TFTP          #language en-US ""
".TH tftp 0 "Download a file from TFTP server."\r\n"
".SH NAME\r\n"
"Download a file from TFTP server.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"TFTP [-i interface] [-l <port>] [-r <port>] [-c <retry count>] [-t <timeout>]\r\n"
"     [-s <block size>] host remotefilepath [localfilepath]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -i interface     - Specifies an adapter name, i.e., eth0.\r\n"
"  -l port          - Specifies the local port number. Default value is 0\r\n"
"                     and the port number is automatically assigned.\r\n"
"  -r port          - Specifies the remote port number. Default value is 69.\r\n"
"  -c <retry count> - The number of times to transmit request packets and\r\n"
"                     wait for a response. The default value is 6.\r\n"
"  -t <timeout>     - The number of seconds to wait for a response after\r\n"
"                     sending a request packet. Default value is 4s.\r\n"
"  -s <block size>  - Specifies the TFTP blksize option as defined in RFC 2348.\r\n"
"                     Valid range is between 8 and 65464, default value is 512.\r\n"
"  host             - Specify TFTP Server IPv4 address.\r\n"
"  remotefilepath   - TFTP server file path to download the file.\r\n"
"  localfilepath    - Local destination file path.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The TFTP command allows to get the file specified by its 'remotefilepath'\r\n"
"     path from the TFTP server specified by its 'host' IPv4 address. If the\r\n"
"     optional 'localfilepath' parameter is provided, the downloaded file is\r\n"
"     stored locally using the provided file path. If the local file path is\r\n"
"     not specified, the file is stored in the current directory using the file\r\n"
"     server's name.\r\n"
"  2. Before using the TFTP command, the network interface intended to be\r\n"
"     used to retrieve the file must be configured. This configuration may be\r\n"
"     done by means of the 'ifconfig' command.\r\n"
"  3. If a network interface is defined with the '-i' option then only this\r\n"
"     interface will be used to retrieve the remote file. Otherwise, all network\r\n"
"     interfaces are tried in the order they have been discovered during the\r\n"
"     DXE phase.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To get the file "dir1/file1.dat" from the TFTP server 192.168.1.1 and\r\n"
"    store it as file2.dat in the current directory :\r\n"
"    fs0:\> tftp 192.168.1.1 dir1/file1.dat file2.dat\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"

