183 lines
4.8 KiB
Plaintext
183 lines
4.8 KiB
Plaintext
|
{
|
|||
|
$Project$
|
|||
|
$Workfile$
|
|||
|
$Revision$
|
|||
|
$DateUTC$
|
|||
|
$Id$
|
|||
|
|
|||
|
This file is part of the Indy (Internet Direct) project, and is offered
|
|||
|
under the dual-licensing agreement described on the Indy website.
|
|||
|
(http://www.indyproject.org/)
|
|||
|
|
|||
|
Copyright:
|
|||
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
|||
|
}
|
|||
|
{
|
|||
|
$Log$
|
|||
|
}
|
|||
|
{
|
|||
|
Rev 1.3 10/26/2004 9:55:58 PM JPMugaas
|
|||
|
Updated refs.
|
|||
|
|
|||
|
Rev 1.2 4/19/2004 5:06:10 PM JPMugaas
|
|||
|
Class rework Kudzu wanted.
|
|||
|
|
|||
|
Rev 1.1 10/19/2003 3:36:18 PM DSiders
|
|||
|
Added localization comments.
|
|||
|
|
|||
|
Rev 1.0 10/1/2003 12:55:20 AM JPMugaas
|
|||
|
New FTP list parsers.
|
|||
|
}
|
|||
|
|
|||
|
unit IdFTPListParseStercomOS390Exp;
|
|||
|
|
|||
|
interface
|
|||
|
|
|||
|
{$i IdCompilerDefines.inc}
|
|||
|
|
|||
|
uses
|
|||
|
Classes,
|
|||
|
IdFTPList, IdFTPListParseBase;
|
|||
|
|
|||
|
type
|
|||
|
TIdSterCommExpOS390FTPListItem = class(TIdFTPListItem)
|
|||
|
protected
|
|||
|
FRecFormat : String;
|
|||
|
FRecLength : Integer;
|
|||
|
FBlockSize : Integer;
|
|||
|
public
|
|||
|
property RecFormat : String read FRecFormat write FRecFormat;
|
|||
|
property RecLength : Integer read FRecLength write FRecLength;
|
|||
|
property BlockSize : Integer read FBlockSize write FBlockSize;
|
|||
|
end;
|
|||
|
|
|||
|
TIdFTPLPSterCommExpOS390 = class(TIdFTPListBase)
|
|||
|
protected
|
|||
|
class function MakeNewItem(AOwner : TIdFTPListItems) : TIdFTPListItem; override;
|
|||
|
class function ParseLine(const AItem : TIdFTPListItem; const APath : String = ''): Boolean; override;
|
|||
|
public
|
|||
|
class function GetIdent : String; override;
|
|||
|
class function CheckListing(AListing : TStrings; const ASysDescript : String = ''; const ADetails : Boolean = True): Boolean; override;
|
|||
|
end;
|
|||
|
|
|||
|
const
|
|||
|
STIRCOMEXPOS390 = 'Connect:Express for OS/390'; {do not localize}
|
|||
|
|
|||
|
// RLebeau 2/14/09: this forces C++Builder to link to this unit so
|
|||
|
// RegisterFTPListParser can be called correctly at program startup...
|
|||
|
|
|||
|
{$IFDEF HAS_DIRECTIVE_HPPEMIT_LINKUNIT}
|
|||
|
{$HPPEMIT LINKUNIT}
|
|||
|
{$ELSE}
|
|||
|
{$HPPEMIT '#pragma link "IdFTPListParseStercomOS390Exp"'}
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
implementation
|
|||
|
|
|||
|
uses
|
|||
|
IdException,
|
|||
|
IdGlobal, IdFTPCommon, IdGlobalProtocols,
|
|||
|
SysUtils;
|
|||
|
|
|||
|
{
|
|||
|
"Connect:Express OS/390 FTP Guide Version 4.1" Copyright
|
|||
|
<20> 2002, 2003 Sterling Commerce, Inc.
|
|||
|
|
|||
|
125 LIST Command accepted.
|
|||
|
-D 2 T VB 00244 18000 FTPGDG!PSR$TST.GDG.TSTGDG0(+01)
|
|||
|
-D 2 * VB 00244 27800 FTPV!PSR$TST.A.VVV.&REQNUMB
|
|||
|
-F 1 R - - - FTPVAL1!PSR$TST.A.VVV
|
|||
|
250 list completed successfully.
|
|||
|
|
|||
|
The LIST of symbolic files from Connect:Express Files directory available for
|
|||
|
User FTP1 is sent. A number of File attributes are showed. Default profile FTPV
|
|||
|
is part of the list. The Following attributes are sent:
|
|||
|
- Dynamic or Fixed Allocation
|
|||
|
- Allocation rule: 2 = to be created, 1 = pre-allocated, 0=to be created or replaced
|
|||
|
- Direction Transmission, Reception, * = both
|
|||
|
- File record format (Variable, Fixed, Blocked..)
|
|||
|
- Record length
|
|||
|
- Block size
|
|||
|
}
|
|||
|
|
|||
|
{ TIdFTPLPSterCommExpOS390 }
|
|||
|
|
|||
|
class function TIdFTPLPSterCommExpOS390.CheckListing(AListing: TStrings;
|
|||
|
const ASysDescript: String; const ADetails: Boolean): Boolean;
|
|||
|
var
|
|||
|
LBuf : String;
|
|||
|
begin
|
|||
|
Result := False;
|
|||
|
if AListing.Count > 0 then
|
|||
|
begin
|
|||
|
if not IdFTPCommon.IsTotalLine(AListing[0]) then
|
|||
|
begin
|
|||
|
LBuf := AListing[0];
|
|||
|
if Length(LBuf) >= 3 then
|
|||
|
begin
|
|||
|
if CharIsInSet(LBuf, 2, 'DF') and (LBuf[3] = ' ') then {do not localize}
|
|||
|
begin
|
|||
|
Result := True;
|
|||
|
Exit;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if Length(LBuf) >= 5 then
|
|||
|
begin
|
|||
|
if CharIsInSet(LBuf, 4, '012') and (LBuf[5] = ' ') then {do not localize}
|
|||
|
begin
|
|||
|
Result := True;
|
|||
|
Exit;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
class function TIdFTPLPSterCommExpOS390.GetIdent: String;
|
|||
|
begin
|
|||
|
Result := STIRCOMEXPOS390;
|
|||
|
end;
|
|||
|
|
|||
|
class function TIdFTPLPSterCommExpOS390.MakeNewItem(AOwner: TIdFTPListItems): TIdFTPListItem;
|
|||
|
begin
|
|||
|
Result := TIdSterCommExpOS390FTPListItem.Create(AOwner);
|
|||
|
end;
|
|||
|
|
|||
|
class function TIdFTPLPSterCommExpOS390.ParseLine(const AItem: TIdFTPListItem;
|
|||
|
const APath: String): Boolean;
|
|||
|
var
|
|||
|
s : TStrings;
|
|||
|
LI : TIdSterCommExpOS390FTPListItem;
|
|||
|
begin
|
|||
|
LI := AItem as TIdSterCommExpOS390FTPListItem;
|
|||
|
s := TStringList.Create;
|
|||
|
try
|
|||
|
SplitDelimitedString(AItem.Data, s, True);
|
|||
|
if s.Count > 3 then
|
|||
|
begin
|
|||
|
if s[3] <> '-' then begin {do not localize}
|
|||
|
LI.RecFormat := s[3];
|
|||
|
end;
|
|||
|
end;
|
|||
|
if s.Count > 4 then begin
|
|||
|
LI.RecLength := IndyStrToInt64(s[4], 0);
|
|||
|
end;
|
|||
|
if s.Count > 5 then begin
|
|||
|
LI.BlockSize := IndyStrToInt64(s[5], 0);
|
|||
|
end;
|
|||
|
if s.Count > 6 then begin
|
|||
|
LI.FileName := s[6];
|
|||
|
end;
|
|||
|
finally
|
|||
|
FreeAndNil(s);
|
|||
|
end;
|
|||
|
Result := True;
|
|||
|
end;
|
|||
|
|
|||
|
initialization
|
|||
|
RegisterFTPListParser(TIdFTPLPSterCommExpOS390);
|
|||
|
finalization
|
|||
|
UnRegisterFTPListParser(TIdFTPLPSterCommExpOS390);
|
|||
|
|
|||
|
end.
|