// /**
//
// (C) Copyright 2015 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. Prior to invoke the TFTP command, the network interface intended to be\r\n"
"     used to retrieve the file as to 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 is used to access to 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"

