251 lines
5.9 KiB
Plaintext
251 lines
5.9 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT File4;
|
|
|
|
INTERFACE
|
|
|
|
USES
|
|
Common;
|
|
|
|
PROCEDURE ExecProtocol(TextFN,
|
|
Dir,
|
|
BatLine: AStr;
|
|
OKLevel: Integer;
|
|
VAR ReturnCode: Integer;
|
|
VAR TransferTime: LongInt);
|
|
FUNCTION FindReturnCode(ProtCode: ProtocolCodeType; XBStat: PRFlagSet; ReturnCode: AStr): Boolean;
|
|
FUNCTION DoProtocol(VAR Protocol: ProtocolRecordType; UL,DL,Batch,Resume: Boolean): Integer;
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
ExecBat,
|
|
TimeFunc;
|
|
|
|
FUNCTION FindReturnCode(ProtCode: ProtocolCodeType; XBStat: PRFlagSet; ReturnCode: AStr): Boolean;
|
|
VAR
|
|
Counter: Byte;
|
|
Found: Boolean;
|
|
BEGIN
|
|
FindReturnCode := FALSE;
|
|
Found := FALSE;
|
|
FOR Counter := 1 TO 6 DO
|
|
IF (ProtCode[Counter] <> '') THEN
|
|
IF (Pos(ProtCode[Counter],Copy(ReturnCode,1,Length(ProtCode[Counter]))) <> 0) THEN
|
|
Found := TRUE;
|
|
IF (Found) AND (NOT (ProtXferOkCode IN Protocol.PRFlags)) THEN
|
|
Exit;
|
|
IF (NOT Found) AND (ProtXferOkCode IN Protocol.PRFlags) THEN
|
|
Exit;
|
|
FindReturnCode := Found;
|
|
END;
|
|
|
|
PROCEDURE ExecProtocol(TextFN,
|
|
Dir,
|
|
BatLine: AStr;
|
|
OKLevel: Integer;
|
|
VAR ReturnCode: Integer;
|
|
VAR TransferTime: LongInt);
|
|
VAR
|
|
SaveSwapShell,
|
|
ResultOk: Boolean;
|
|
BEGIN
|
|
IF (General.MultiNode) THEN
|
|
BEGIN
|
|
LoadNode(ThisNode);
|
|
SaveNAvail := (NAvail IN NodeR.Status);
|
|
Exclude(NodeR.Status,NAvail);
|
|
SaveNode(ThisNode);
|
|
END;
|
|
|
|
TransferTime := GetPackDateTime;
|
|
|
|
IF (TextFN <> '') THEN
|
|
BEGIN
|
|
AllowContinue := TRUE;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
CLS;
|
|
UserColor(1);
|
|
ReturnCode := 0;
|
|
PrintF(TextFN);
|
|
IF (NoFile) THEN
|
|
ReturnCode := 2;
|
|
NL;
|
|
PauseScr(FALSE);
|
|
UserColor(1);
|
|
AllowContinue := FALSE;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SaveSwapShell := General.SwapShell;
|
|
General.SwapShell := FALSE;
|
|
ExecWindow(ResultOK,
|
|
Dir,
|
|
BatLine,
|
|
OKLevel,
|
|
ReturnCode);
|
|
General.SwapShell := SaveSwapShell;
|
|
END;
|
|
|
|
TransferTime := (GetPackDateTime - TransferTime);
|
|
|
|
IF (General.MultiNode) THEN
|
|
BEGIN
|
|
LoadNode(ThisNode);
|
|
IF (SaveNAvail) THEN
|
|
Include(NodeR.Status,NAvail);
|
|
SaveNode(ThisNode);
|
|
END;
|
|
END;
|
|
|
|
FUNCTION OkProt(Protocol: ProtocolRecordType; UL,DL,Batch,Resume: Boolean): Boolean;
|
|
VAR
|
|
ULDLCmdStr: AStr;
|
|
BEGIN
|
|
OkProt := FALSE;
|
|
WITH Protocol DO
|
|
BEGIN
|
|
IF (UL) THEN
|
|
ULDLCmdStr := ULCmd
|
|
ELSE IF (DL) THEN
|
|
ULDLCmdStr := DLCmd
|
|
ELSE
|
|
ULDLCmdStr := '';
|
|
IF (ULDLCmdStr = '') THEN
|
|
Exit;
|
|
IF (ULDLCmdStr = 'NEXT') AND ((UL) OR (Batch) OR (Resume)) THEN
|
|
Exit;
|
|
IF (ULDLCmdStr = 'ASCII') AND ((UL) OR (Batch) OR (Resume)) THEN
|
|
Exit;
|
|
IF (ULDLCmdStr = 'BATCH') AND ((Batch) OR (Resume)) AND (NOT Write_Msg) THEN
|
|
Exit;
|
|
IF (Batch <> (ProtIsBatch in PRFlags)) THEN
|
|
Exit;
|
|
IF (Resume <> (ProtIsResume in PRFlags)) THEN
|
|
Exit;
|
|
IF (ProtReliable in PRFlags) AND (NOT Reliable) THEN
|
|
Exit;
|
|
IF (NOT (ProtActive in PRFlags)) THEN
|
|
Exit;
|
|
IF (NOT AACS(ACS)) THEN
|
|
Exit;
|
|
END;
|
|
OkProt := TRUE;
|
|
END;
|
|
|
|
PROCEDURE ShowProts(VAR CmdStr: AStr; UL,DL,Batch,Resume: Boolean);
|
|
VAR
|
|
RecNum: Integer;
|
|
BEGIN
|
|
NoFile := TRUE;
|
|
IF (Resume) THEN
|
|
PrintF('PROTRES')
|
|
ELSE
|
|
BEGIN
|
|
IF (Batch) THEN
|
|
IF (UL) THEN
|
|
PrintF('PROTBUL')
|
|
ELSE
|
|
PrintF('PROTBDL')
|
|
ELSE IF (UL) THEN
|
|
PrintF('PROTSUL')
|
|
ELSE
|
|
PrintF('PROTSDL');
|
|
END;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
CmdStr := '';
|
|
RecNum := 1;
|
|
WHILE (RecNum <= NumProtocols) AND (NOT Abort) AND (NOT HangUp) DO
|
|
BEGIN
|
|
Seek(ProtocolFile,(RecNum - 1));
|
|
Read(ProtocolFile,Protocol);
|
|
IF (OkProt(Protocol,UL,DL,Batch,Resume)) THEN
|
|
BEGIN
|
|
IF (NoFile) AND (Protocol.Description <> '') THEN
|
|
Print(Protocol.Description);
|
|
IF (Protocol.CKeys = 'ENTER') then
|
|
CmdStr := CmdStr + ^M
|
|
ELSE
|
|
CmdStr := CmdStr + Protocol.CKeys[1];
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
IF (NoFile) THEN
|
|
NL;
|
|
END;
|
|
|
|
FUNCTION FindProt(Cmd: Char; UL,DL,Batch,Resume: Boolean): Integer;
|
|
VAR
|
|
ULDLCmdStr: AStr;
|
|
RecNum,
|
|
RecNum1: Integer;
|
|
BEGIN
|
|
RecNum1 := -99;
|
|
RecNum := 1;
|
|
WHILE (RecNum <= NumProtocols) AND (RecNum1 = -99) DO
|
|
BEGIN
|
|
Seek(ProtocolFile,(RecNum - 1));
|
|
Read(ProtocolFile,Protocol);
|
|
IF (Cmd = Protocol.Ckeys[1]) OR ((Cmd = ^M) AND (Protocol.Ckeys = 'ENTER')) THEN
|
|
IF (OkProt(Protocol,UL,DL,Batch,Resume)) THEN
|
|
BEGIN
|
|
IF (UL) THEN
|
|
ULDLCmdStr := Protocol.ULCmd
|
|
ELSE IF (DL) THEN
|
|
ULDLCmdStr := Protocol.DLCmd
|
|
ELSE
|
|
ULDLCmdStr := '';
|
|
IF (ULDLCmdStr = 'ASCII') THEN
|
|
RecNum1 := -1
|
|
ELSE IF (ULDLCmdStr = 'QUIT') THEN
|
|
RecNum1 := -2
|
|
ELSE IF (ULDLCmdStr = 'NEXT') THEN
|
|
RecNum1 := -3
|
|
ELSE IF (ULDLCmdStr = 'BATCH') THEN
|
|
RecNum1 := -4
|
|
ELSE IF (ULDLCmdStr = 'EDIT') THEN
|
|
RecNum1 := -5
|
|
ELSE IF (ULDLCmdStr <> '') THEN
|
|
RecNum1 := RecNum;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
FindProt := RecNum1;
|
|
END;
|
|
|
|
FUNCTION DoProtocol(VAR Protocol: ProtocolRecordType; UL,DL,Batch,Resume: Boolean): Integer;
|
|
VAR
|
|
CmdStr: AStr;
|
|
Cmd: Char;
|
|
RecNum: Integer;
|
|
BEGIN
|
|
Reset(ProtocolFile);
|
|
REPEAT
|
|
ShowProts(CmdStr,UL,DL,Batch,Resume);
|
|
{ Prompt('%DFPROTLIST%^4Selection^2: ');}
|
|
lRGLngStr(17,FALSE);;
|
|
OneK(Cmd,CmdStr,TRUE,TRUE);
|
|
RecNum := FindProt(Cmd,UL,DL,Batch,Resume);
|
|
IF (RecNum = -99) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Invalid option.');
|
|
END
|
|
ELSE IF (RecNum >= 1) AND (RecNum <= NumProtocols) THEN
|
|
BEGIN
|
|
Seek(ProtocolFile,(RecNum - 1));
|
|
Read(ProtocolFile,Protocol);
|
|
END
|
|
UNTIL (RecNum <> -99) OR (HangUp);
|
|
Close(ProtocolFile);
|
|
LastError := IOResult;
|
|
DoProtocol := RecNum;
|
|
END;
|
|
|
|
END. |