996 lines
30 KiB
Plaintext
996 lines
30 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT File6;
|
|
|
|
INTERFACE
|
|
|
|
USES
|
|
Common;
|
|
|
|
FUNCTION CheckBatchDL(FileName: Str52): Boolean;
|
|
PROCEDURE EditBatchDLQueue;
|
|
PROCEDURE BatchDownload;
|
|
PROCEDURE ListBatchDLFiles;
|
|
PROCEDURE RemoveBatchDLFiles;
|
|
PROCEDURE ClearBatchDlQueue;
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
Dos,
|
|
Common5,
|
|
ExecBat,
|
|
File0,
|
|
File1,
|
|
File2,
|
|
File4,
|
|
File12,
|
|
MultNode,
|
|
ShortMsg,
|
|
TimeFunc;
|
|
|
|
FUNCTION CheckBatchDL(FileName: Str52): Boolean;
|
|
VAR
|
|
RecNum: LongInt;
|
|
FileFound: Boolean;
|
|
BEGIN
|
|
FileFound := FALSE;
|
|
IF (NumBatchDLFiles > 0) THEN
|
|
BEGIN
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) AND (NOT FileFound) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) AND (BatchDL.BDLFileName = FileName) THEN
|
|
FileFound := TRUE;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchDLFile);
|
|
LastError := IOResult;
|
|
END;
|
|
CheckBatchDL := FileFound;
|
|
END;
|
|
|
|
PROCEDURE EditBatchDLQueue;
|
|
VAR
|
|
Cmd: CHAR;
|
|
BEGIN
|
|
IF (NumBatchDLFiles = 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('The batch download queue is empty');
|
|
Exit;
|
|
END;
|
|
REPEAT
|
|
NL;
|
|
Prt('Batch download queue [^5C^4=^5Clear Batch^4,^5L^4=^5List Batch^4,^5R^4=^5Remove a file^4,^5Q^4=^5Quit^4]: ');
|
|
OneK(Cmd,'QCLR',TRUE,TRUE);
|
|
CASE Cmd OF
|
|
'C' : ClearBatchDlQueue;
|
|
'L' : ListBatchDLFiles;
|
|
'R' : RemoveBatchDLFiles;
|
|
END;
|
|
UNTIL (Cmd = 'Q') OR (HangUp);
|
|
END;
|
|
|
|
PROCEDURE BatchDownload;
|
|
TYPE
|
|
TotalsRecordType = RECORD
|
|
FilesDL,
|
|
FilesDLRatio: Byte;
|
|
BytesDL,
|
|
BytesDLRatio,
|
|
PointsDL,
|
|
PointsDLRatio: LongInt;
|
|
END;
|
|
VAR
|
|
Totals: TotalsRecordType;
|
|
FileListTxt,
|
|
DLFListTxt: Text;
|
|
NewFileName: AStr;
|
|
SaveLastDirFileName: Str12;
|
|
NumExtDesc,
|
|
Counter,
|
|
Counter1: BYTE;
|
|
ReturnCode,
|
|
SaveFileArea,
|
|
DirFileRecNum,
|
|
ProtocolNumber,
|
|
SaveLastDirFileRecNum,
|
|
ToXfer: Integer;
|
|
RecNum,
|
|
RecNum1,
|
|
TransferTime: LongInt;
|
|
AutoLogOff,
|
|
FO: Boolean;
|
|
|
|
PROCEDURE AddNacc(BatchDL: BatchDLRecordType);
|
|
BEGIN
|
|
IF (BatchDL.BDLSection = -1) THEN
|
|
BEGIN
|
|
IF (IsFileAttach IN BatchDL.BDLFlags) THEN
|
|
MemFileArea.AreaName := 'File Attach'
|
|
ELSE IF (IsUnlisted IN BatchDL.BDLFlags) THEN
|
|
MemFileArea.AreaName := 'Unlisted Download'
|
|
ELSE IF (IsTempArc IN BatchDL.BDLFlags) THEN
|
|
MemFileArea.AreaName := 'Temporary Archive'
|
|
ELSE IF (IsQWK IN BatchDL.BDLFlags) THEN
|
|
MemFileArea.AreaName := 'QWK Download';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SaveLastDirFileRecNum := LastDIRRecNum;
|
|
SaveLastDirFileName := LastDIRFileName;
|
|
FO := (FileRec(FileInfoFile).Mode <> FMClosed);
|
|
IF (FO) THEN
|
|
BEGIN
|
|
Close(FileInfoFile);
|
|
Close(ExtInfoFile);
|
|
END;
|
|
SaveFileArea := FileArea;
|
|
FileArea := BatchDL.BDLSection;
|
|
RecNo(FileInfo,StripName(BatchDL.BDLFileName),DirFileRecNum);
|
|
IF (BadDownloadPath) THEN
|
|
Exit;
|
|
IF (DirFileRecNum <> -1) THEN
|
|
BEGIN
|
|
Seek(FileInfoFile,DirFileRecNum);
|
|
Read(FileInfoFile,FileInfo);
|
|
Inc(FileInfo.Downloaded);
|
|
Seek(FileInfoFile,DirFileRecNum);
|
|
Write(FileInfoFile,FileInfo);
|
|
END;
|
|
Close(FileInfoFile);
|
|
Close(ExtInfoFile);
|
|
FileArea := SaveFileArea;
|
|
IF (FO) THEN
|
|
InitFileArea(FileArea);
|
|
LastDIRRecNum := SaveLastDirFileRecNum;
|
|
LastDIRFileName := SaveLastDirFileName;
|
|
END;
|
|
NL;
|
|
Star(StripName(BatchDL.BDLFileName)+' successfully downloaded.');
|
|
SysOpLog('^3Batch downloaded: "^5'+StripName(BatchDL.BDLFileName)+'^3" from ^5'+
|
|
MemFileArea.AreaName+'.');
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
FUNCTION ReverseSlash(S: AStr): AStr;
|
|
VAR
|
|
Counter: Byte;
|
|
BEGIN
|
|
FOR Counter := 1 TO Length(S) DO
|
|
IF (S[Counter] = '/') THEN
|
|
S[Counter] := '\';
|
|
ReverseSlash := S;
|
|
END;
|
|
|
|
PROCEDURE UpdateSatistics(BatchDL: BatchDLRecordType);
|
|
BEGIN
|
|
|
|
IF (Totals.FilesDL < 255) THEN
|
|
Inc(Totals.FilesDL);
|
|
|
|
IF ((Totals.BytesDL + BatchDL.BDLFSize) < 2147483647) THEN
|
|
Inc(Totals.BytesDL,BatchDL.BDLFSize)
|
|
ELSE
|
|
Totals.BytesDL := 2147483647;
|
|
|
|
IF ((Totals.PointsDL + BatchDL.BDLPoints) < 2147483647) THEN
|
|
Inc(Totals.PointsDL,BatchDL.BDLPoints)
|
|
ELSE
|
|
Totals.PointsDL := 2147483647;
|
|
|
|
IF (NOT (IsNoRatio IN BatchDL.BDLFlags)) THEN
|
|
BEGIN
|
|
IF (Totals.FilesDLRatio < 255) THEN
|
|
Inc(Totals.FilesDLRatio);
|
|
|
|
IF ((Totals.BytesDLRatio + BatchDL.BDLFSize) < 2147483647) THEN
|
|
Inc(Totals.BytesDLRatio,BatchDL.BDLFSize)
|
|
ELSE
|
|
Totals.BytesDLRatio := 2147483647;
|
|
END;
|
|
|
|
IF (NOT (IsNoFilePoints IN BatchDL.BDLFlags)) THEN
|
|
IF ((Totals.PointsDLRatio + BatchDL.BDLPoints) < 2147483647) THEN
|
|
Inc(Totals.PointsDLRatio,BatchDL.BDLPoints)
|
|
ELSE
|
|
Totals.PointsDLRatio := 2147483647;
|
|
|
|
AddNacc(BatchDL);
|
|
|
|
WITH FileInfo DO
|
|
BEGIN
|
|
FileName := StripName(BatchDL.BDLFileName);
|
|
Description := '';
|
|
FilePoints := BatchDL.BDLPoints;
|
|
Downloaded := 0;
|
|
FileSize := 0;
|
|
OwnerNum := BatchDL.BDLUploader;
|
|
OwnerName := BatchDL.BDLOwnerName;
|
|
FileDate := 0;
|
|
VPointer := 0;
|
|
VTextSize := 0;
|
|
FIFlags := [];
|
|
END;
|
|
|
|
CreditUploader(FileInfo);
|
|
|
|
Dec(NumBatchDLFiles);
|
|
Dec(BatchDLTime,BatchDL.BDLTime);
|
|
Dec(BatchDLSize,BatchDL.BDLFSize);
|
|
Dec(BatchDLPoints,BatchDL.BDLPoints);
|
|
IF (BatchDL.BDLStorage = Copied) THEN
|
|
Kill(BatchDL.BDLFileName);
|
|
|
|
END;
|
|
|
|
PROCEDURE ChopOfSpace(VAR S: AStr);
|
|
BEGIN
|
|
WHILE (S[1] = ' ') DO
|
|
S := Copy(S,2,(Length(S) - 1));
|
|
IF (Pos(' ',S) <> 0) THEN
|
|
S := Copy(S,1,(Pos(' ',S) - 1));
|
|
END;
|
|
|
|
PROCEDURE FigureSucc;
|
|
VAR
|
|
TempLogTxt,
|
|
DLoadLogTxt: Text;
|
|
LogStr,
|
|
FileStr,
|
|
StatStr: AStr;
|
|
RecNum,
|
|
RecNum1: LongInt;
|
|
ToFile,
|
|
ReadLog,
|
|
FoundFile,
|
|
FoundReturnCode: Boolean;
|
|
BEGIN
|
|
|
|
ReadLog := FALSE;
|
|
ToFile := FALSE;
|
|
IF (Protocol.TempLog <> '') THEN
|
|
BEGIN
|
|
Assign(TempLogTxt,FunctionalMCI(Protocol.TempLog,'',''));
|
|
Reset(TempLogTxt);
|
|
IF (IOResult = 0) THEN
|
|
BEGIN
|
|
ReadLog := TRUE;
|
|
IF (FunctionalMCI(Protocol.DLoadLog,'','') <> '') THEN
|
|
BEGIN
|
|
Assign(DLoadLogTxt,FunctionalMCI(Protocol.DLoadLog,'',''));
|
|
Append(DLoadLogTxt);
|
|
IF (IOResult = 2) THEN
|
|
ReWrite(DLoadLogTxt);
|
|
ToFile := TRUE;
|
|
END;
|
|
|
|
SysOpLog('Start scan of: "^0'+AllCaps(FunctionalMCI(Protocol.TempLog,'',''))+'^1".');
|
|
|
|
WHILE (NOT EOF(TempLogTxt)) DO
|
|
BEGIN
|
|
ReadLn(TempLogTxt,LogStr);
|
|
IF (ToFile) THEN
|
|
WriteLn(DLoadLogTxt,LogStr);
|
|
FileStr := Copy(LogStr,Protocol.TempLogPF,((Length(LogStr) - Protocol.TempLogPF) - 1));
|
|
StatStr := Copy(LogStr,Protocol.TempLogPS,((Length(LogStr) - Protocol.TempLogPS) - 1));
|
|
|
|
FileStr := ReverseSlash(FileStr);
|
|
|
|
ChopOfSpace(FileStr);
|
|
|
|
FoundReturnCode := FALSE;
|
|
FoundFile := FALSE;
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) AND (NOT FoundFile) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) AND (Pos(AllCaps(BatchDL.BDLFileName),AllCaps(FileStr)) <> 0) THEN
|
|
BEGIN
|
|
FoundFile := TRUE;
|
|
IF (FindReturnCode(Protocol.DLCode,Protocol.PRFlags,StatStr)) THEN
|
|
BEGIN
|
|
FoundReturnCode := TRUE;
|
|
UpdateSatistics(BatchDL);
|
|
Dec(RecNum);
|
|
IF (RecNum >= 0) AND (RecNum <= (FileSize(BatchDLFile) - 2)) THEN
|
|
FOR RecNum1 := RecNum TO (FileSize(BatchDLFile) - 2) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum1 + 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
Seek(BatchDLFile,RecNum1);
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Seek(BatchDLFile,(FileSize(BatchDLFile) - 1));
|
|
Truncate(BatchDLFile);
|
|
END;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
|
|
IF (NOT FoundFile) THEN
|
|
SysOpLog('^7File not found: "^5'+BatchDL.BDLFileName+'^7"')
|
|
ELSE IF (NOT FoundReturnCode) THEN
|
|
SysOpLog('^7Return code not found: "^5'+BatchDL.BDLFileName+'^7"');
|
|
END;
|
|
SysOpLog('End scan of: "^0'+AllCaps(FunctionalMCI(Protocol.TempLog,'',''))+'^1".');
|
|
|
|
Close(TempLogTxt);
|
|
IF (ToFile) THEN
|
|
Close(DLoadLogTxt);
|
|
END;
|
|
END;
|
|
|
|
IF (NOT ReadLog) THEN
|
|
BEGIN
|
|
SysOpLog('Start scan of: "^0BATCHDL.DAT^1"');
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
UpdateSatistics(BatchDL);
|
|
Dec(RecNum);
|
|
IF (RecNum >= 0) AND (RecNum <= (FileSize(BatchDLFile) - 2)) THEN
|
|
FOR RecNum1 := RecNum TO (FileSize(BatchDLFile) - 2) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum1 + 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
Seek(BatchDLFile,RecNum1);
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Seek(BatchDLFile,(FileSize(BatchDLFile) - 1));
|
|
Truncate(BatchDLFile);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
SysOpLog('End scan of: "^0BATCHDL.DAT^1"');
|
|
END;
|
|
END;
|
|
|
|
BEGIN
|
|
IF (NumBatchDLFiles = 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('The batch download queue is empty.');
|
|
Exit;
|
|
END;
|
|
|
|
NL;
|
|
Print('^5Batch download (Statistics):^1');
|
|
NL;
|
|
Star('^1Total file(s) : ^5'+FormatNumber(NumBatchDLFiles)+'^1');
|
|
Star('^1Total size : ^5'+ConvertBytes(BatchDLSize,FALSE)+'^1');
|
|
Star('^1Total file points : ^5'+FormatNumber(BatchDLPoints)+'^1');
|
|
Star('^1Download time : ^5'+CTim(BatchDLTime)+'^1');
|
|
Star('^1Time left online : ^5'+CTim(NSL)+'^1');
|
|
|
|
IF (BatchDLPoints > ThisUser.FilePoints) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7Insufficient file points, remove file(s) from your batch queue!^1');
|
|
NL;
|
|
Print('^1Chargeable : ^5'+FormatNumber(BatchDLPoints)+'^1');
|
|
Print('^1Your account : ^5'+FormatNumber(ThisUser.FilePoints)+'^1');
|
|
NL;
|
|
EditBatchDLQueue;
|
|
Exit;
|
|
END;
|
|
|
|
IF (BatchDLTime > NSL) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7Insufficient time left online, remove file(s) from your batch queue!^1');
|
|
NL;
|
|
EditBatchDLQueue;
|
|
Exit;
|
|
END;
|
|
|
|
ProtocolNumber := DoProtocol(Protocol,FALSE,TRUE,TRUE,FALSE);
|
|
|
|
CASE ProtocolNumber OF
|
|
-1 : ;
|
|
-2 : Exit;
|
|
-3 : ;
|
|
-4 : ;
|
|
-5 : EditBatchDLQueue;
|
|
ELSE
|
|
IF (InCom) THEN
|
|
BEGIN
|
|
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
|
|
FillChar(Totals,SizeOf(Totals),0);
|
|
|
|
PurgeDir(TempDir+'UP\',FALSE);
|
|
|
|
IF Exist(FunctionalMCI(Protocol.TempLog,'','')) THEN
|
|
Kill(FunctionalMCI(Protocol.TempLog,'',''));
|
|
|
|
IF Exist(TempDir+'ARC\FILES.BBS') THEN
|
|
Kill(TempDir+'ARC\FILES.BBS');
|
|
|
|
IF Exist(FunctionalMCI(Protocol.DLFList,'','')) THEN
|
|
Kill(FunctionalMCI(Protocol.DLFList,'',''));
|
|
|
|
NL;
|
|
AutoLogOff := PYNQ('Auto-logoff after file transfer? ',0,FALSE);
|
|
|
|
NL;
|
|
IF PYNQ('Download file descriptions? ',0,FALSE) THEN
|
|
BEGIN
|
|
Assign(FileListTxt,TempDir+'ARC\FILES.BBS');
|
|
ReWrite(FileListTxt);
|
|
Writeln(FileListTxt,StripColor(General.BBSName)+' Batch Download File Listing');
|
|
WriteLn(FileListTxt);
|
|
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
IF (BatchDL.BDLSection = -1) THEN
|
|
WriteLn(FileListTxt,PadLeftStr(Align(StripName(BatchDL.BDLFileName)),14)+' [No Description Available]')
|
|
ELSE
|
|
BEGIN
|
|
|
|
SaveLastDirFileRecNum := LastDIRRecNum;
|
|
SaveLastDirFileName := LastDIRFileName;
|
|
FO := (FileRec(FileInfoFile).Mode <> FMClosed);
|
|
IF (FO) THEN
|
|
BEGIN
|
|
Close(FileInfoFile);
|
|
Close(ExtInfoFile);
|
|
END;
|
|
SaveFileArea := FileArea;
|
|
FileArea := BatchDL.BDLSection;
|
|
RecNo(FileInfo,StripName(BatchDL.BDLFileName),DirFileRecNum);
|
|
IF (BadDownloadPath) THEN
|
|
WriteLn(FileListTxt,PadLeftStr(Align(StripName(BatchDL.BDLFileName)),14)+' [Bad Download Path]')
|
|
ELSE IF (DirFileRecNum = -1) THEN
|
|
WriteLn(FileListTxt,PadLeftStr(Align(StripName(BatchDL.BDLFileName)),14)+' [File Not Found]')
|
|
ELSE
|
|
BEGIN
|
|
Seek(FileInfoFile,DirFileRecNum);
|
|
Read(FileInfoFile,FileInfo);
|
|
WriteLn(FileListTxt,PadLeftStr(Align(StripName(BatchDL.BDLFileName)),14)+FileInfo.Description);
|
|
IF (FileInfo.VPointer <> -1) THEN
|
|
BEGIN
|
|
LoadVerbArray(FileInfo,ExtendedArray,NumExtDesc);
|
|
FOR Counter1 := 1 TO NumExtDesc DO
|
|
IF (ExtendedArray[Counter1] <> '') THEN
|
|
WriteLn(FileListTxt,PadLeftStr('',14)+ExtendedArray[Counter1]);
|
|
END;
|
|
Close(FileInfoFile);
|
|
Close(ExtInfoFile);
|
|
FileArea := SaveFileArea;
|
|
IF (FO) THEN
|
|
InitFileArea(FileArea);
|
|
LastDIRRecNum := SaveLastDirFileRecNum;
|
|
LastDIRFileName := SaveLastDirFileName;
|
|
LastError := IOResult;
|
|
END;
|
|
WriteLn(FileListTxt);
|
|
END;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(FileListTxt);
|
|
|
|
WITH BatchDL DO
|
|
BEGIN
|
|
BDLFileName := TempDir+'ARC\FILES.BBS';
|
|
BDLOwnerName := Caps(ThisUser.Name);
|
|
BDLStorage := Disk;
|
|
BDLUserNum := UserNum;
|
|
BDLSection := -1;
|
|
BDLPoints := 0;
|
|
BDLUploader := UserNum;
|
|
BDLFSize := GetFileSize(TempDir+'ARC\FILES.BBS');
|
|
BDLTime := (BDLFSize DIV Rate);
|
|
BDLFlags := [];
|
|
END;
|
|
|
|
Seek(BatchDLFile,FileSize(BatchDLFILE));
|
|
Write(BatchDLFile,BatchDL);
|
|
|
|
Inc(NumBatchDLFiles);
|
|
Inc(BatchDLTime,BatchDL.BDLTime);
|
|
Inc(BatchDLSize,BatchDL.BDLFSize);
|
|
Inc(BatchDLPoints,BatchDL.BDLPoints);
|
|
|
|
NL;
|
|
Print('^1File : ^5FILES.BBS^1');
|
|
Print('^1Size : ^5'+ConvertBytes(BatchDL.BDLFSize,FALSE)+'^1');
|
|
Print('^1File points : ^5'+FormatNumber(BatchDL.BDLPoints)+'^1');
|
|
Print('^1Download time : ^5'+CTim(BatchDL.BDLTime)+'^1');
|
|
NL;
|
|
Print('^1New download time : ^5'+CTim(BatchDLTime)+'^1');
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
Reset(BatchDLFile);
|
|
Counter1 := 0;
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) AND (Counter1 = 0) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) AND (BatchDL.BDLStorage = CD) THEN
|
|
Inc(Counter1);
|
|
Inc(RecNum);
|
|
END;
|
|
|
|
IF (Counter1 <> 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Please wait, copying files from CD-ROM ... ');
|
|
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) AND (BatchDL.BDLStorage = CD) THEN
|
|
IF CopyMoveFile(TRUE,'',BatchDL.BDLFileName,
|
|
TempDir+'CD\'+StripName(BatchDL.BDLFileName),FALSE) THEN
|
|
BEGIN
|
|
BatchDL.BDLStorage := Copied;
|
|
BatchDL.BDLFileName := TempDir+'CD\'+StripName(BatchDL.BDLFileName);
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
END;
|
|
|
|
|
|
NewFileName := General.ProtPath+FunctionalMCI(Protocol.DLCmd,'','');
|
|
|
|
ToXfer := 0;
|
|
|
|
IF (Pos('%F',Protocol.DLCmd) <> 0) THEN
|
|
BEGIN
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
Inc(ToXFer);
|
|
NewFileName := FunctionalMCI(NewFileName,BatchDL.BDLFileName,'');
|
|
IF (Length(NewFileName) > Protocol.MaxChrs) THEN
|
|
BEGIN
|
|
SysOpLog('^7Exceeds maximum DOS char length: "^5'+NewFileName+'^1"');
|
|
RecNum := FileSize(BatchDLFile);
|
|
END;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
END;
|
|
|
|
IF (Protocol.DLFList <> '') THEN
|
|
BEGIN
|
|
Assign(DLFListTxt,FunctionalMCI(Protocol.DLFList,'',''));
|
|
ReWrite(DLFListTxt);
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
WriteLn(DLFListTxt,BatchDL.BDLFileName);
|
|
Inc(ToXfer);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(DLFListTxt);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
NL;
|
|
Star('Ready to send batch download transfer.');
|
|
|
|
ExecProtocol('',
|
|
TempDir+'UP\',
|
|
FunctionalMCI(Protocol.EnvCmd,'','')
|
|
+#13#10+
|
|
NewFileName,
|
|
-1,
|
|
ReturnCode,
|
|
TransferTime);
|
|
|
|
NL;
|
|
Star('Batch download transfer complete.');
|
|
|
|
IF Exist(FunctionalMCI(Protocol.DLFList,'','')) THEN
|
|
Kill(FunctionalMCI(Protocol.DLFList,'',''));
|
|
|
|
IF Exist(TempDir+'ARC\FILES.BBS') THEN
|
|
BEGIN
|
|
Reset(BatchDLFile);
|
|
RecNum1 := -1;
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) AND (RecNum1 = -1) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF ((BatchDL.BDLUserNum = UserNum) AND (BatchDL.BDLFileName = TempDir+'ARC\FILES.BBS')) THEN
|
|
BEGIN
|
|
Dec(NumBatchDLFiles);
|
|
Dec(BatchDLTime,BatchDL.BDLTime);
|
|
Dec(BatchDLSize,BatchDL.BDLFSize);
|
|
Dec(BatchDLPoints,BatchDL.BDLPoints);
|
|
IF (BatchDL.BDLStorage = Copied) THEN
|
|
Kill(BatchDL.BDLFileName);
|
|
RecNum1 := RecNum;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
IF (RecNum1 <> -1) THEN
|
|
BEGIN
|
|
Dec(RecNum1);
|
|
FOR RecNum := RecNum1 TO (FileSize(BatchDLFile) - 2) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum + 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
Seek(BatchDLFile,RecNum);
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Seek(BatchDLFile,(FileSize(BatchDLFile) - 1));
|
|
Truncate(BatchDLFile);
|
|
END;
|
|
Kill(TempDir+'ARC\FILES.BBS');
|
|
END;
|
|
|
|
FigureSucc;
|
|
|
|
IF Exist(FunctionalMCI(Protocol.TempLog,'','')) THEN
|
|
Kill(FunctionalMCI(Protocol.TempLog,'',''));
|
|
|
|
IF ((DownloadsToday + Totals.FilesDL) < 2147483647) THEN
|
|
Inc(DownloadsToday,Totals.FilesDL)
|
|
ELSE
|
|
DownloadsToday := 2147483647;
|
|
|
|
IF ((DownloadKBytesToday + (Totals.BytesDL DIV 1024)) < 2147483647) THEN
|
|
Inc(DownloadKBytesToday,(Totals.BytesDL DIV 1024))
|
|
ELSE
|
|
DownloadKBytesToday := 2147483647;
|
|
|
|
IF ((ThisUser.Downloads + Totals.FilesDLRatio) < 2147483647) THEN
|
|
Inc(ThisUser.Downloads,Totals.FilesDLRatio)
|
|
ELSE
|
|
ThisUser.Downloads := 2147483647;
|
|
|
|
IF ((ThisUser.DLToday + Totals.FilesDLRatio) < 2147483647) THEN
|
|
Inc(ThisUser.DLToday,Totals.FilesDLRatio)
|
|
ELSE
|
|
ThisUser.DLToday := 2147483647;
|
|
|
|
IF ((ThisUser.DK + (Totals.BytesDLRatio DIV 1024)) < 2147483647) THEN
|
|
Inc(ThisUser.DK,(Totals.BytesDLRatio DIV 1024))
|
|
ELSE
|
|
ThisUser.DK := 2147483647;
|
|
|
|
IF ((ThisUser.DLKToday + (Totals.BytesDLRatio DIV 1024)) < 2147483647) THEN
|
|
Inc(ThisUser.DLKToday,(Totals.BytesDLRatio DIV 1024))
|
|
ELSE
|
|
ThisUser.DLKToday := 2147483647;
|
|
|
|
IF ((ThisUser.FilePoints - Totals.PointsDLRatio) > 0) THEN
|
|
Dec(ThisUser.FilePoints,Totals.PointsDLRatio)
|
|
ELSE
|
|
ThisUser.FilePoints := 0;
|
|
|
|
LIL := 0;
|
|
|
|
NL;
|
|
Print('^5Batch download (Totals):^1');
|
|
NL;
|
|
Star('^1Total file(s) : ^5'+FormatNumber(Totals.FilesDL));
|
|
Star('^1Total size : ^5'+ConvertBytes(Totals.BytesDL,FALSE));
|
|
Star('^1Total file points : ^5'+FormatNumber(Totals.PointsDL));
|
|
Star('^1Download time : ^5'+FormattedTime(TransferTime));
|
|
Star('^1Transfer rate : ^5'+FormatNumber(GetCPS(Totals.BytesDL,TransferTime))+' cps');
|
|
|
|
SysOpLog('^3 - Totals:'+
|
|
' '+FormatNumber(Totals.FilesDL)+' '+Plural('file',Totals.FilesDL)+
|
|
', '+ConvertBytes(Totals.BytesDL,FALSE)+
|
|
', '+FormatNumber(Totals.PointsDL)+' fp'+
|
|
', '+FormattedTime(TransferTime)+' tt'+
|
|
', '+FormatNumber(GetCPS(Totals.BytesDL,Transfertime))+' cps.');
|
|
|
|
IF (Totals.FilesDL < Totals.FilesDLRatio) THEN
|
|
Totals.FilesDLRatio := Totals.FilesDL;
|
|
|
|
LIL := 0;
|
|
|
|
NL;
|
|
Print('^5Batch download (Charges):^1');
|
|
NL;
|
|
Star('^1Total file(s) : ^5'+FormatNumber(Totals.FilesDLRatio));
|
|
Star('^1Total size : ^5'+ConvertBytes(Totals.BytesDLRatio,FALSE));
|
|
Star('^1Total file points : ^5'+FormatNumber(Totals.PointsDLRatio));
|
|
|
|
SysOpLog('^3 - Charges:'+
|
|
' '+FormatNumber(Totals.FilesDLRatio)+' '+Plural('file',Totals.FilesDLRatio)+
|
|
', '+ConvertBytes(Totals.BytesDLRatio,FALSE)+
|
|
', '+FormatNumber(Totals.PointsDLRatio)+' fp.');
|
|
|
|
IF (NumBatchDLFiles > 0) THEN
|
|
BEGIN
|
|
|
|
Totals.BytesDL := 0;
|
|
Totals.PointsDL := 0;
|
|
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
Inc(Totals.BytesDL,BatchDL.BDLFSize);
|
|
Inc(Totals.PointsDL,BatchDL.BDLPoints);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
|
|
LIL := 0;
|
|
|
|
NL;
|
|
Print('^5Batch download (Not Transferred):^1');
|
|
NL;
|
|
Star('^1Total file(s) : ^5'+FormatNumber(NumBatchDLFiles));
|
|
Star('^1Total size : ^5'+ConvertBytes(Totals.BytesDL,FALSE));
|
|
Star('^1Total file points : ^5'+FormatNumber(Totals.PointsDL));
|
|
|
|
SysOpLog('^3 - Not downloaded:'+
|
|
' '+FormatNumber(NumBatchDLFiles)+' '+Plural('file',NumBatchDLFiles)+
|
|
', '+ConvertBytes(Totals.BytesDL,FALSE)+
|
|
', '+FormatNumber(Totals.PointsDL)+' fp.');
|
|
END;
|
|
|
|
Close(BatchDLFile);
|
|
|
|
LIL := 0;
|
|
|
|
NL;
|
|
Print('^5Enjoy the file(s), '+Caps(ThisUser.Name)+'!^1');
|
|
PauseScr(FALSE);
|
|
|
|
SaveURec(ThisUser,UserNum);
|
|
|
|
IF (ProtBiDirectional IN Protocol.PRFlags) THEN
|
|
BatchUpload(TRUE,TransferTime);
|
|
|
|
IF (AutoLogOff) THEN
|
|
CountDown
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE ListBatchDLFiles;
|
|
VAR
|
|
FileNumToList: Byte;
|
|
RecNum: LongInt;
|
|
BEGIN
|
|
IF (NumBatchDLFiles = 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('The batch download queue is empty.');
|
|
Exit;
|
|
END;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
NL;
|
|
PrintACR('^4###:FileName.Ext Area Pts Bytes hh:mm:ss^1');
|
|
PrintACR('^4===:============:=====:======:=============:========^1');
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
FileNumToList := 1;
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) AND (NOT Abort) AND (NOT HangUp) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
PrintACR('^3'+PadRightInt(FileNumToList,3)+
|
|
'^4:^5'+Align(StripName(BatchDL.BDLFileName))+
|
|
' '+AOnOff((BatchDL.BDLSection = -1),'^7 --- ','^5'+PadRightInt(CompFileArea(BatchDL.BDLSection,0),5))+
|
|
' ^4'+PadRightStr(FormatNumber(BatchDL.BDLPoints),6)+
|
|
' ^4'+PadRightStr(FormatNumber(BatchDL.BDLFSize),13)+
|
|
' ^7'+CTim(BatchDL.BDLTime)+
|
|
AOnOff(IsNoRatio IN BatchDL.BDLFlags,'^5 [No-Ratio]','')+
|
|
AOnOff(IsNoFilePoints IN BatchDL.BDLFlags,'^5 [No-Points]','')+'^1');
|
|
Inc(FileNumToList);
|
|
END;
|
|
WKey;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchDLFile);
|
|
LastError := IOResult;
|
|
PrintACR('^4===:============:=====:======:=============:========^1');
|
|
PrintACR('^3'+PadLeftStr('Totals:',22)+
|
|
' ^4'+PadRightStr(FormatNumber(BatchDLPoints),6)+
|
|
' '+PadRightStr(FormatNumber(BatchDLSize),13)+
|
|
' ^7'+CTim(BatchDLTime)+'^1');
|
|
SysOpLog('Viewed the batch download queue.');
|
|
END;
|
|
|
|
PROCEDURE RemoveBatchDLFiles;
|
|
VAR
|
|
InputStr: Str3;
|
|
Counter,
|
|
FileNumToRemove: Byte;
|
|
RecNum,
|
|
RecNum1: LongInt;
|
|
BEGIN
|
|
IF (NumBatchDLFiles = 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('The batch download queue is empty.');
|
|
Exit;
|
|
END;
|
|
InputStr := '?';
|
|
REPEAT
|
|
IF (InputStr = '?') THEN
|
|
ListBatchDLFiles;
|
|
NL;
|
|
Prt('File to remove? (^51^4-^5'+IntToStr(NumBatchDLFiles)+'^4) [^5?^4=^5List^4,^5<CR>^4=^5Quit^4]: ');
|
|
MPL(Length(IntToStr(NumBatchDLFiles)));
|
|
ScanInput(InputStr,^M'?');
|
|
FileNumToRemove := StrToInt(InputStr);
|
|
IF (NOT (InputStr[1] IN ['?','-',^M])) THEN
|
|
IF (FileNumToRemove < 1) OR (FileNumToRemove > NumBatchDLFiles) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7The range must be from 1 to '+IntToStr(NumBatchDLFiles)+'!^1');
|
|
InputStr := '?';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Counter := 0;
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
Inc(Counter);
|
|
IF (Counter = FileNumToRemove) THEN
|
|
BEGIN
|
|
Dec(NumBatchDLFiles);
|
|
Dec(BatchDLTime,BatchDL.BDLTime);
|
|
Dec(BatchDLSize,BatchDL.BDLFSize);
|
|
Dec(BatchDLPoints,BatchDL.BDLPoints);
|
|
IF (BatchDL.BDLStorage = Copied) THEN
|
|
Kill(BatchDL.BDLFileName);
|
|
NL;
|
|
Print('Removed from batch download queue: "^5'+StripName(BatchDL.BDLFileName)+'^1".');
|
|
SysOpLog('Batch DL Remove: "^5'+StripName(BatchDL.BDLFileName)+'^1".');
|
|
Dec(RecNum);
|
|
FOR RecNum1 := RecNum TO (FileSize(BatchDLFile) - 2) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum1 + 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
Seek(BatchDLFile,RecNum1);
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Seek(BatchDLFile,(FileSize(BatchDLFile) - 1));
|
|
Truncate(BatchDLFile);
|
|
RecNum := FileSize(BatchDLFile);
|
|
END;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchDLFile);
|
|
LastError := IOResult;
|
|
IF (NumBatchDLFiles <> 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^1Batch download queue: ^5'+IntToStr(NumBatchDLFiles)+' '+Plural('file',NumBatchDLFiles)+
|
|
', '+ConvertBytes(BatchDLSize,FALSE)+
|
|
', '+FormatNumber(BatchDLPoints)+
|
|
' '+Plural('file point',BatchDLPoints)+', '+FormattedTime(BatchDLTime));
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
BatchDLTime := 0;
|
|
BatchDLSize := 0;
|
|
BatchDLPoints := 0;
|
|
NL;
|
|
Print('The batch download queue is now empty.');
|
|
SysOpLog('Cleared the batch download queue.');
|
|
END;
|
|
END;
|
|
UNTIL (InputStr <> '?') OR (HangUp);
|
|
END;
|
|
|
|
PROCEDURE ClearBatchDLQueue;
|
|
VAR
|
|
RecNum,
|
|
RecNum1: LongInt;
|
|
BEGIN
|
|
IF (NumBatchDLFiles = 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('The batch download queue is empty.');
|
|
Exit;
|
|
END;
|
|
NL;
|
|
IF PYNQ('Clear batch download queue? ',0,FALSE) THEN
|
|
BEGIN
|
|
NL;
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
Dec(NumBatchDLFiles);
|
|
Dec(BatchDLTime,BatchDL.BDLTime);
|
|
Dec(BatchDLSize,BatchDL.BDLFSize);
|
|
Dec(BatchDLPoints,BatchDL.BDLPoints);
|
|
IF (BatchDL.BDLStorage = Copied) THEN
|
|
Kill(BatchDL.BDLFileName);
|
|
Print('Removed from batch download queue: "^5'+StripName(BatchDL.BDLFileName)+'^1".');
|
|
SysOpLog('Batch DL Remove: "^5'+StripName(BatchDL.BDLFileName)+'^1".');
|
|
Dec(RecNum);
|
|
FOR RecNum1 := RecNum TO (FileSize(BatchDLFile) - 2) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum1 + 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
Seek(BatchDLFile,RecNum1);
|
|
Write(BatchDLFile,BatchDL);
|
|
END;
|
|
Seek(BatchDLFile,(FileSize(BatchDLFile) - 1));
|
|
Truncate(BatchDLFile);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchDLFile);
|
|
LastError := IOResult;
|
|
BatchDLTime := 0;
|
|
BatchDLSize := 0;
|
|
BatchDLPoints := 0;
|
|
NL;
|
|
Print('The batch download queue is now empty.');
|
|
SysOpLog('Cleared the batch download queue.');
|
|
END;
|
|
END;
|
|
|
|
END.
|