1589 lines
41 KiB
Plaintext
1589 lines
41 KiB
Plaintext
{$IFDEF WIN32}
|
||
{$I DEFINES.INC}
|
||
{$ENDIF}
|
||
|
||
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
||
|
||
UNIT File1;
|
||
|
||
INTERFACE
|
||
|
||
USES
|
||
Common;
|
||
|
||
FUNCTION ChargeFilePoints(FArea: Integer): Boolean;
|
||
FUNCTION ChargeFileRatio(FArea: Integer): Boolean;
|
||
PROCEDURE CreditUploader(FileInfo: FileInfoRecordType);
|
||
FUNCTION SearchForDups(CONST CompleteFN: Str12): Boolean;
|
||
FUNCTION DizExists(CONST FN: AStr): Boolean;
|
||
PROCEDURE GetDiz(VAR FileInfo: FileInfoRecordType; VAR ExtendedArray: ExtendedDescriptionArray; VAR NumExtDesc: Byte);
|
||
PROCEDURE DLX(FileInfo: FileInfoRecordType;
|
||
DirFileRecNum: Integer;
|
||
VAR TransferFlags: TransferFlagSet);
|
||
FUNCTION DLInTime: BOOLEAN;
|
||
FUNCTION BatchDLQueuedFiles(TransferFlags: TransferFlagSet): BOOLEAN;
|
||
PROCEDURE DL(CONST FileName: Str12; TransferFlags: TransferFlagSet);
|
||
PROCEDURE GetFileDescription(VAR FileInfo: FileInfoRecordType; VAR ExtendedArray: ExtendedDescriptionArray;
|
||
VAR NumExtDesc: Byte; VAR ToSysOp: Boolean);
|
||
PROCEDURE WriteFV(FileInfo: FileInfoRecordType;DirFileRecNum: Integer; ExtendedArray: ExtendedDescriptionArray);
|
||
PROCEDURE UpdateFileInfo(VAR FileInfo: FileInfoRecordType; CONST FN: Str12; VAR GotPts: Integer);
|
||
PROCEDURE ArcStuff(VAR Ok,Convt: Boolean; VAR FSize,ConvTime: LongInt;
|
||
ITest: Boolean; CONST FilePath: AStr; VAR FileName: Str12; VAR Descr: AStr);
|
||
PROCEDURE DownloadFile(FileName: Str12; TransferFlags: TransferFlagSet);
|
||
PROCEDURE UploadFile;
|
||
PROCEDURE LFileAreaList(VAR FArea,NumFAreas: Integer; AdjPageLen: Byte; ShowScan: Boolean);
|
||
PROCEDURE UnlistedDownload(FileName: AStr);
|
||
PROCEDURE Do_Unlisted_Download;
|
||
|
||
IMPLEMENTATION
|
||
|
||
USES
|
||
Dos,
|
||
Crt,
|
||
Archive1,
|
||
Email,
|
||
Events,
|
||
File0,
|
||
File2,
|
||
File6,
|
||
File8,
|
||
File11,
|
||
File12,
|
||
File14,
|
||
MultNode,
|
||
ShortMsg,
|
||
TimeFunc;
|
||
|
||
FUNCTION ChargeFilePoints(FArea: Integer): Boolean;
|
||
VAR
|
||
ChargePoints: Boolean;
|
||
BEGIN
|
||
ChargePoints := FALSE;
|
||
IF (FArea <> -1) AND
|
||
(NOT (FANoRatio IN MemFileArea.FAFlags)) AND
|
||
(NOT AACS(General.NoFileCredits)) AND
|
||
(NOT (FNoCredits IN ThisUser.Flags)) AND
|
||
(General.FileCreditRatio) THEN
|
||
ChargePoints := TRUE;
|
||
ChargeFilePoints := ChargePoints;
|
||
END;
|
||
|
||
FUNCTION ChargeFileRatio(FArea: Integer): Boolean;
|
||
VAR
|
||
ChargeRatio: Boolean;
|
||
BEGIN
|
||
ChargeRatio := FALSE;
|
||
IF (FArea <> -1) AND
|
||
(NOT (FANoRatio IN MemFileArea.FAFlags)) AND
|
||
(NOT AACS(General.NoDLRatio)) AND
|
||
(NOT (FNoDLRatio IN ThisUser.Flags)) AND
|
||
(General.ULDLRatio) THEN
|
||
ChargeRatio := TRUE;
|
||
ChargeFileRatio := ChargeRatio;
|
||
END;
|
||
|
||
PROCEDURE CreditUploader(FileInfo: FileInfoRecordType);
|
||
VAR
|
||
User: UserRecordType;
|
||
FilePointCredit: LongInt;
|
||
BEGIN
|
||
IF (General.RewardSystem) AND (FileInfo.OwnerNum >= 1) AND (FileInfo.OwnerNum <= (MaxUsers - 1)) AND
|
||
(FileInfo.OwnerNum <> UserNum) THEN
|
||
BEGIN
|
||
LoadURec(User,FileInfo.OwnerNum);
|
||
FilePointCredit := Trunc(FileInfo.FilePoints * (General.RewardRatio DIV 100));
|
||
IF (CRC32(FileInfo.OwnerName) = CRC32(User.Name)) AND (FilePointCredit > 0) THEN
|
||
BEGIN
|
||
IF ((User.FilePoints + FilePointCredit) < 2147483647) THEN
|
||
Inc(User.FilePoints,FilePointCredit)
|
||
ELSE
|
||
User.FilePoints := 2147483647;
|
||
SaveURec(User,FileInfo.OwnerNum);
|
||
SysOpLog('^3 - Credits: '+FormatNumber(FilePointCredit)+' fp to "^5'+Caps(User.Name)+'^3".');
|
||
SendShortMessage(FileInfo.OwnerNum,'You received '+FormatNumber(FilePointCredit)+
|
||
' '+Plural('file point',FilePointCredit)+' for the download of '
|
||
+SQOutSp(FileInfo.FileName));
|
||
END;
|
||
END;
|
||
END;
|
||
|
||
FUNCTION OKDL(CONST FileInfo: FileInfoRecordType): Boolean;
|
||
VAR
|
||
MHeader: MHeaderRec;
|
||
Counter: Byte;
|
||
BEGIN
|
||
OKDL := TRUE;
|
||
IF (FIIsRequest IN FileInfo.FIFlags) THEN
|
||
BEGIN
|
||
PrintF('REQFILE');
|
||
IF (NoFile) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5You must request this from '+General.SysOpName+'!^1');
|
||
END;
|
||
NL;
|
||
IF (PYNQ('Request this file now? ',0,FALSE)) THEN
|
||
BEGIN
|
||
InResponseTo := #1'Request "'+SQOutSp(FileInfo.FileName)+'" from area #'+IntToStr(CompFileArea(FileArea,0));
|
||
MHeader.Status := [];
|
||
SEMail(1,MHeader);
|
||
END;
|
||
OKDL := FALSE;
|
||
END
|
||
ELSE IF (FIResumeLater IN FileInfo.FIFlags) AND (NOT FileSysOp) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7You are not the uploader of this file!^1');
|
||
OKDL := FALSE;
|
||
END
|
||
ELSE IF (FINotVal IN FileInfo.FIFlags) AND (NOT AACS(General.DLUNVal)) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7Your access level does not permit downloading unvalidated files!^1');
|
||
OKDL := FALSE;
|
||
END
|
||
ELSE IF (FileInfo.FilePoints > 0) AND (ThisUser.FilePoints < FileInfo.FilePoints) AND
|
||
ChargeFilePoints(FileArea) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7'+lRGLngStr(26,TRUE)+'^1'{FString.NoFileCredits});
|
||
OKDL := FALSE;
|
||
END
|
||
ELSE IF ((FileInfo.FileSize DIV Rate) > NSL) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7Insufficient time left online to download this file!^1');
|
||
Print(Ctim(NSL));
|
||
OKDL := FALSE;
|
||
END;
|
||
END;
|
||
|
||
PROCEDURE DLX(FileInfo: FileInfoRecordType;
|
||
DirFileRecNum: Integer;
|
||
VAR TransferFlags: TransferFlagSet);
|
||
VAR
|
||
DownloadPath: Str52;
|
||
CopyPath: Str40;
|
||
Cmd: Char;
|
||
Changed: Boolean;
|
||
BEGIN
|
||
Abort := FALSE;
|
||
Next := FALSE;
|
||
IF (IsFileAttach IN TransferFlags) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^4The following has been attached:^1');
|
||
END;
|
||
NL;
|
||
DisplayFileInfo(FileInfo,FALSE);
|
||
IF (IsFileAttach IN TransferFlags) THEN
|
||
IF (InCom) THEN
|
||
BEGIN
|
||
NL;
|
||
IF (NOT PYNQ('Download file now? ',0,FALSE)) THEN
|
||
Exit;
|
||
END
|
||
ELSE IF (NOT CoSysOp) THEN
|
||
Exit
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
IF (NOT PYNQ('Move file now? ',0,FALSE)) THEN
|
||
Exit;
|
||
END;
|
||
|
||
IF (NOT OKDL(FileInfo)) THEN
|
||
Include(TransferFlags,IsPaused)
|
||
ELSE
|
||
BEGIN
|
||
|
||
DownloadPath := '';
|
||
|
||
IF (Exist(MemFileArea.DLPath+FileInfo.FileName)) THEN
|
||
BEGIN
|
||
DownloadPath := MemFileArea.DLPath;
|
||
IF (FACDRom IN MemFileArea.FAFlags) THEN
|
||
InClude(TransferFLags,IsCDRom);
|
||
END
|
||
ELSE IF (Exist(MemFileArea.ULPath+FileInfo.FileName)) THEN
|
||
DownloadPath := MemFileArea.ULPath;
|
||
|
||
IF (DownloadPath = '') THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7File does not actually exist.^1');
|
||
SysOpLog('File missing: '+SQOutSp(DownloadPath+FileInfo.FileName));
|
||
Exit;
|
||
END;
|
||
IF (InCom) THEN
|
||
Send(FileInfo,DirFileRecNum,DownloadPath,TransferFlags)
|
||
ELSE IF (NOT CoSysOp) THEN
|
||
Include(TransferFlags,IsPaused)
|
||
ELSE
|
||
BEGIN
|
||
CopyPath := '';
|
||
InputPath('%LF^4Enter the destination path (^5End with a ^4"^5\^4"):%LF^4:',CopyPath,FALSE,TRUE,Changed);
|
||
IF (CopyPath = '') THEN
|
||
Include(TransferFlags,IsPaused)
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
IF (NOT CopyMoveFile(NOT (IsFileAttach IN TransferFlags),
|
||
+AOnOff(IsFileAttach IN TransferFlags,'^1Moving ... ','^1Copying ... '),
|
||
DownloadPath+SQOutSp(FileInfo.FileName),
|
||
CopyPath+SQOutSp(FileInfo.FileName),TRUE)) THEN
|
||
Include(TransferFlags,IsPaused);
|
||
END;
|
||
END;
|
||
END;
|
||
IF (IsPaused IN TransferFlags) AND (NOT (IsFileAttach IN TransferFlags)) THEN
|
||
BEGIN
|
||
NL;
|
||
Prompt('^1Press [^5Enter^1] to Continue or [^5Q^1]uit: ');
|
||
Onek(Cmd,'Q'^M,TRUE,TRUE);
|
||
IF (Cmd = 'Q') THEN
|
||
BEGIN
|
||
Include(TransferFlags,IsKeyboardAbort);
|
||
Abort := TRUE;
|
||
END;
|
||
END;
|
||
IF (IsPaused IN TransferFLags) THEN
|
||
Exclude(TransferFlags,IsPaused);
|
||
END;
|
||
|
||
PROCEDURE DL(CONST FileName: Str12; TransferFlags: TransferFlagSet);
|
||
VAR
|
||
SaveFileArea,
|
||
FArea: Integer;
|
||
GotAny,
|
||
Junk: Boolean;
|
||
|
||
FUNCTION ScanBase(FileName1: Str12; VAR GotAny1: Boolean): Boolean;
|
||
VAR
|
||
DirFileRecNum: Integer;
|
||
BEGIN
|
||
ScanBase := FALSE;
|
||
RecNo(FileInfo,FileName1,DirFileRecNum);
|
||
IF (BadDownloadPath) THEN
|
||
Exit;
|
||
WHILE (DirFileRecNum <> -1) AND (NOT Abort) AND (NOT HangUp) DO
|
||
BEGIN
|
||
Seek(FileInfoFile,DirFileRecNum);
|
||
Read(FileInfoFile,FileInfo);
|
||
BackErase(13);
|
||
IF (NOT (FINotVal IN FileInfo.FIFlags)) OR (AACS(General.DLUnVal)) THEN
|
||
IF AACS(MemFileArea.DLACS) THEN
|
||
BEGIN
|
||
DLX(FileInfo,DirFileRecNum,TransferFlags);
|
||
ScanBase := TRUE;
|
||
IF (IsKeyboardAbort IN TransferFlags) THEN
|
||
Abort := TRUE;
|
||
IF (NOT (IsWildCard(FileName1))) THEN
|
||
Abort := TRUE;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
Print('Your access level does not permit downloading this file.');
|
||
END;
|
||
GotAny1 := TRUE;
|
||
WKey;
|
||
NRecNo(FileInfo,DirFileRecNum);
|
||
END;
|
||
Close(FileInfoFile);
|
||
Close(ExtInfoFile);
|
||
LastError := IOResult;
|
||
END;
|
||
|
||
BEGIN
|
||
GotAny := FALSE;
|
||
Abort := FALSE;
|
||
Next := FALSE;
|
||
|
||
Include(TransferFlags,IsCheckRatio);
|
||
|
||
NL;
|
||
Prompt('Searching ...');
|
||
|
||
IF (NOT ScanBase(FileName,GotAny)) THEN
|
||
BEGIN
|
||
SaveFileArea := FileArea;
|
||
FArea := 1;
|
||
WHILE (FArea >= 1) AND (FArea <= NumFileAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
||
BEGIN
|
||
IF (FArea <> SaveFileArea) THEN
|
||
BEGIN
|
||
LoadFileArea(FArea);
|
||
IF (MemFileArea.Password = '') THEN (* Doesn't scan areas with a Password ??? *)
|
||
ChangeFileArea(FArea);
|
||
IF (FileArea = FArea) THEN
|
||
Junk := ScanBase(FileName,GotAny);
|
||
END;
|
||
WKey;
|
||
Inc(FArea);
|
||
END;
|
||
FileArea := SaveFileArea;
|
||
LoadFileArea(FileArea);
|
||
END;
|
||
IF (NOT GotAny) THEN
|
||
BEGIN
|
||
BackErase(13);
|
||
NL;
|
||
Print('File not found.');
|
||
END;
|
||
END;
|
||
|
||
FUNCTION DLInTime: BOOLEAN;
|
||
VAR
|
||
DLAllowed: BOOLEAN;
|
||
BEGIN
|
||
DLAllowed := TRUE;
|
||
|
||
IF (NOT InTime(Timer,General.DLLowTime,General.DLHiTime)) THEN
|
||
DLAllowed := FALSE;
|
||
|
||
IF (ComPortSpeed < General.MinimumDLBaud) THEN
|
||
IF (NOT InTime(Timer,General.MinBaudDLLowTime,General.MinBaudDLHiTime)) THEN
|
||
DLAllowed := FALSE;
|
||
|
||
IF (NOT DLAllowed) THEN
|
||
BEGIN
|
||
NL;
|
||
PrintF('DLHOURS');
|
||
IF (NoFile) THEN
|
||
Print('File downloading is not allowed at this time.');
|
||
END;
|
||
DLInTime := DLAllowed;
|
||
END;
|
||
|
||
FUNCTION BatchDLQueuedFiles(TransferFlags: TransferFlagSet): BOOLEAN;
|
||
VAR
|
||
DLBatch: BOOLEAN;
|
||
BEGIN
|
||
DLBatch := FALSE;
|
||
IF (NOT (lIsAddDLBatch IN TransferFLags)) AND (NumBatchDLFiles > 0) THEN
|
||
BEGIN
|
||
NL;
|
||
IF (PYNQ('Batch download queued files? ',0,FALSE)) THEN
|
||
BEGIN
|
||
BatchDownload;
|
||
DLBatch := TRUE;
|
||
END;
|
||
END;
|
||
BatchDLQueuedFiles := DLBatch;
|
||
END;
|
||
|
||
PROCEDURE DownloadFile(FileName: Str12; TransferFlags: TransferFlagSet);
|
||
BEGIN
|
||
IF (DLInTime) THEN
|
||
IF (NOT BatchDLQueuedFiles(TransferFlags)) THEN
|
||
BEGIN
|
||
IF (FileName = '') THEN
|
||
BEGIN
|
||
PrintF('DLOAD');
|
||
IF (NOT (lIsAddDLBatch IN TransferFlags)) THEN
|
||
{
|
||
NL;
|
||
Print(FString.downloadline)
|
||
NL;
|
||
Prt('File name: ');
|
||
}
|
||
lRGLngStr(23,FALSE)
|
||
ELSE
|
||
{
|
||
NL;
|
||
Print(FString.AddDLBatch);
|
||
NL;
|
||
Prt('File name: ');
|
||
}
|
||
lRGLngStr(31,FALSE);
|
||
MPL(12);
|
||
Input(FileName,12);
|
||
IF (FileName = '') THEN
|
||
BEGIN
|
||
NL;
|
||
Print('Aborted.');
|
||
END;
|
||
END;
|
||
IF (FileName <> '') THEN
|
||
BEGIN
|
||
IF (Pos('.',FileName) = 0) THEN
|
||
FileName := FileName+'.*';
|
||
DL(FileName,TransferFlags);
|
||
END
|
||
END;
|
||
END;
|
||
|
||
PROCEDURE GetFileDescription(VAR FileInfo: FileInfoRecordType; VAR ExtendedArray: ExtendedDescriptionArray;
|
||
VAR NumExtDesc: Byte; VAR ToSysOp: Boolean);
|
||
VAR
|
||
MaxLen: Byte;
|
||
BEGIN
|
||
NL;
|
||
IF ((ToSysOp) AND (General.ToSysOpDir >= 1) AND (General.ToSysOpDir <= NumFileAreas)) THEN
|
||
Print('Begin description with (/) to make upload "Private".')
|
||
ELSE
|
||
ToSysOp := FALSE;
|
||
LoadFileArea(FileArea);
|
||
IF ((FAUseGIFSpecs IN MemFileArea.FAFlags) AND ISGifExt(FileInfo.FileName)) THEN
|
||
BEGIN
|
||
Print('Enter your text. Press <^5Enter^1> alone to end. (31 chars/line 1, 50 chars/line 2-'+IntToStr(MaxExtDesc + 1)+')');
|
||
MaxLen := 31;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
Print('Enter your text. Press <^5Enter^1> alone to end. (50 chars/line 1-'+IntToStr(MaxExtDesc + 1)+')');
|
||
MaxLen := 50;
|
||
END;
|
||
REPEAT
|
||
Prt(': ');
|
||
MPL(MaxLen);
|
||
InputWC(FileInfo.Description,MaxLen);
|
||
IF ((FileInfo.Description[1] = '/') OR (RValidate IN ThisUser.Flags)) AND (ToSysOp) THEN
|
||
BEGIN
|
||
IF (General.ToSysOpDir >= 1) AND (General.ToSysOpDir <= NumFileAreas) THEN
|
||
FileArea := General.ToSysOpDir;
|
||
InitFileArea(FileArea);
|
||
ToSysOp := TRUE;
|
||
END
|
||
ELSE
|
||
ToSysOp := FALSE;
|
||
IF (FileInfo.Description[1] = '/') THEN
|
||
Delete(FileInfo.Description,1,1);
|
||
UNTIL ((FileInfo.Description <> '') OR (FileSysOp) OR (HangUp));
|
||
FillChar(ExtendedArray,SizeOf(ExtendedArray),0);
|
||
NumExtDesc := 0;
|
||
REPEAT
|
||
Inc(NumExtDesc);
|
||
Prt(': ');
|
||
MPL(50);
|
||
InputL(ExtendedArray[NumExtDesc],50);
|
||
UNTIL (ExtendedArray[NumExtDesc] = '') OR (NumExtDesc = MaxExtDesc) OR (HangUp);
|
||
END;
|
||
|
||
FUNCTION DizExists(CONST FN: AStr): Boolean;
|
||
VAR
|
||
Ok: Boolean;
|
||
BEGIN
|
||
DizExists := FALSE;
|
||
IF (ArcType(FN) > 0) THEN
|
||
BEGIN
|
||
Star('Checking for description...'#29);
|
||
ArcDecomp(Ok,ArcType(FN),FN,'FILE_ID.DIZ DESC.SDI');
|
||
IF (Ok) AND (Exist(TempDir+'ARC\FILE_ID.DIZ') OR (Exist(TempDir+'ARC\DESC.SDI'))) THEN
|
||
DizExists := TRUE;
|
||
NL;
|
||
END;
|
||
END;
|
||
|
||
PROCEDURE GetDiz(VAR FileInfo: FileInfoRecordType; VAR ExtendedArray: ExtendedDescriptionArray; VAR NumExtDesc: Byte);
|
||
VAR
|
||
DizFile: Text;
|
||
TempStr: Str50;
|
||
Counter: Byte;
|
||
BEGIN
|
||
IF (Exist(TempDir+'ARC\FILE_ID.DIZ')) THEN
|
||
Assign(DizFile,TempDir+'ARC\FILE_ID.DIZ')
|
||
ELSE
|
||
Assign(DizFile,TempDir+'ARC\DESC.SDI');
|
||
Reset(DizFile);
|
||
IF (IOResult <> 0) THEN
|
||
Exit;
|
||
Star('Importing description.');
|
||
FillChar(ExtendedArray,SizeOf(ExtendedArray),0);
|
||
Counter := 1;
|
||
WHILE NOT EOF(DizFile) AND (Counter <= (MaxExtDesc + 1)) DO
|
||
BEGIN
|
||
ReadLn(DizFile,TempStr);
|
||
IF (TempStr = '') THEN
|
||
TempStr := ' ';
|
||
IF (Counter = 1) THEN
|
||
FileInfo.Description := TempStr
|
||
ELSE
|
||
ExtendedArray[Counter - 1] := TempStr;
|
||
Inc(Counter);
|
||
END;
|
||
NumExtDesc := MaxExtDesc;
|
||
WHILE (NumExtDesc >= 1) AND ((ExtendedArray[NumExtDesc] = ' ') OR (ExtendedArray[NumExtDesc] = '')) DO
|
||
BEGIN
|
||
ExtendedArray[NumExtDesc] := '';
|
||
Dec(NumExtDesc);
|
||
END;
|
||
Close(DizFile);
|
||
Erase(DizFile);
|
||
LastError := IOResult;
|
||
END;
|
||
|
||
PROCEDURE WriteFV(FileInfo: FileInfoRecordType; DirFileRecNum: Integer; ExtendedArray: ExtendedDescriptionArray);
|
||
VAR
|
||
LineNum: Byte;
|
||
VFO: Boolean;
|
||
BEGIN
|
||
FileInfo.VTextSize := 0;
|
||
IF (ExtendedArray[1] = '') THEN
|
||
FileInfo.VPointer := -1
|
||
ELSE
|
||
BEGIN
|
||
VFO := (FileRec(ExtInfoFile).Mode <> FMClosed);
|
||
IF (NOT VFO) THEN
|
||
Reset(ExtInfoFile,1);
|
||
IF (IOResult = 0) THEN
|
||
BEGIN
|
||
FileInfo.VPointer := (FileSize(ExtInfoFile) + 1);
|
||
Seek(ExtInfoFile,FileSize(ExtInfoFile));
|
||
FOR LineNum := 1 TO MaxExtDesc DO
|
||
IF (ExtendedArray[LineNum] <> '') THEN
|
||
BEGIN
|
||
Inc(FileInfo.VTextSize,(Length(ExtendedArray[LineNum]) + 1));
|
||
BlockWrite(ExtInfoFile,ExtendedArray[LineNum],(Length(ExtendedArray[LineNum]) + 1));
|
||
END;
|
||
IF (NOT VFO) THEN
|
||
Close(ExtInfoFile);
|
||
END;
|
||
END;
|
||
Seek(FileInfoFile,DirFileRecNum);
|
||
Write(FileInfoFile,FileInfo);
|
||
LastError := IOResult;
|
||
END;
|
||
|
||
PROCEDURE UpdateFileInfo(VAR FileInfo: FileInfoRecordType; CONST FN: Str12; VAR GotPts: Integer);
|
||
BEGIN
|
||
WITH FileInfo DO
|
||
BEGIN
|
||
FileName := Align(FN);
|
||
Downloaded := 0;
|
||
OwnerNum := UserNum;
|
||
OwnerName := AllCaps(ThisUser.Name);
|
||
FileDate := Date2PD(DateStr);
|
||
IF (NOT General.FileCreditRatio) THEN
|
||
BEGIN
|
||
FilePoints := 0;
|
||
GotPts := 0;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
FilePoints := 0;
|
||
IF (General.FileCreditCompBaseSize > 0) THEN
|
||
FilePoints := ((FileSize DIV 1024) DIV General.FileCreditCompBaseSize);
|
||
GotPts := (FilePoints * General.FileCreditComp);
|
||
IF (GotPts < 1) THEN
|
||
GotPts := 1;
|
||
END;
|
||
FIFlags := [];
|
||
|
||
IF (NOT AACS(General.ULValReq)) AND (NOT General.ValidateAllFiles) THEN
|
||
Include(FIFlags,FINotVal);
|
||
|
||
END;
|
||
END;
|
||
|
||
(*
|
||
OldArcType : current archive format, 0 IF none
|
||
NewArcType : desired archive format, 0 IF none
|
||
OldFileName : current FileName
|
||
NewFileName : desired archive format FileName
|
||
*)
|
||
|
||
PROCEDURE ArcStuff(VAR Ok,
|
||
Convt: Boolean; { IF Ok - IF converted }
|
||
VAR FSize, { file size }
|
||
ConvTime: LongInt; { convert time }
|
||
ITest: Boolean; { whether to test integrity }
|
||
CONST FilePath: AStr; { filepath }
|
||
VAR FileName: Str12; { FileName }
|
||
VAR Descr: AStr); { Description }
|
||
VAR
|
||
OldFileName,
|
||
NewFileName: AStr;
|
||
OldArcType,
|
||
NewArcType: Byte;
|
||
BEGIN
|
||
Ok := TRUE;
|
||
|
||
ConvTime := 0;
|
||
|
||
FSize := GetFileSize(FilePath+FileName);
|
||
|
||
IF (NOT General.TestUploads) THEN
|
||
Exit;
|
||
|
||
OldFileName := SQOutSp(FilePath+FileName);
|
||
|
||
OldArcType := ArcType(OldFileName);
|
||
|
||
NewArcType := MemFileArea.ArcType;
|
||
|
||
IF (NOT General.FileArcInfo[NewArcType].Active) OR
|
||
(General.FileArcInfo[NewArcType].Ext = '') THEN
|
||
BEGIN
|
||
NewArcType := 0;
|
||
NewArcType := OldArcType;
|
||
END;
|
||
|
||
|
||
IF ((OldArcType <> 0) AND (NewArcType <> 0)) THEN
|
||
BEGIN
|
||
|
||
|
||
NewFileName := FileName;
|
||
|
||
IF (Pos('.',NewFileName) <> 0) THEN
|
||
NewFileName := Copy(NewFileName,1,(Pos('.',NewFileName) - 1));
|
||
|
||
NewFileName := SQOutSp(FilePath+NewFileName+'.'+General.FileArcInfo[NewArcType].Ext);
|
||
|
||
IF ((ITest) AND (General.FileArcInfo[OldArcType].TestLine <> '')) THEN
|
||
BEGIN
|
||
NL;
|
||
Star('Testing file integrity ... '#29);
|
||
ArcIntegrityTest(Ok,OldArcType,OldFileName);
|
||
IF (NOT Ok) THEN
|
||
BEGIN
|
||
SysOpLog('^5 '+OldFileName+' on #'+IntToStr(FileArea)+': errors in integrity test');
|
||
Print('^3failed.');
|
||
END
|
||
ELSE
|
||
Print('^3passed.');
|
||
END;
|
||
|
||
IF (Ok) AND ((OldArcType <> NewArcType) OR General.Recompress) AND (NewArcType <> 0) THEN
|
||
BEGIN
|
||
Convt := InCom; {* don't convert IF local AND non-file-SysOp *}
|
||
|
||
IF (FileSysOp) THEN
|
||
BEGIN
|
||
IF (OldArcType = NewArcType) THEN
|
||
Convt := PYNQ('Recompress this file? ',0,TRUE)
|
||
ELSE
|
||
Convt := PYNQ('Convert archive to .'+General.FileArcInfo[NewArcType].Ext+' format? ',0,TRUE);
|
||
END;
|
||
|
||
IF (Convt) THEN
|
||
BEGIN
|
||
NL;
|
||
|
||
ConvTime := GetPackDateTime;
|
||
|
||
ConvA(Ok,OldArcType,NewArcType,OldFileName,NewFileName);
|
||
|
||
ConvTime := (GetPackDateTime - ConvTime);
|
||
|
||
IF (Ok) THEN
|
||
BEGIN
|
||
|
||
IF (OldArcType <> NewArcType) THEN
|
||
Kill(FilePath+FileName);
|
||
|
||
FSize := GetFileSize(NewFileName);
|
||
|
||
IF (FSize = -1) OR (FSize = 0) THEN
|
||
Ok := FALSE;
|
||
|
||
FileName := Align(StripName(NewFileName));
|
||
Star('No errors in conversion, file passed.');
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
IF (OldArcType <> NewArcType) THEN
|
||
Kill(NewFileName);
|
||
SysOpLog('^5 '+OldFileName+' on #'+IntToStr(FileArea)+': Conversion unsuccessful');
|
||
Star('errors in conversion! Original format retained.');
|
||
NewArcType := OldArcType;
|
||
END;
|
||
Ok := TRUE;
|
||
END
|
||
ELSE
|
||
NewArcType := OldArcType;
|
||
END;
|
||
|
||
IF (Ok) AND (General.FileArcInfo[NewArcType].CmtLine <> '') THEN
|
||
BEGIN
|
||
ArcComment(Ok,NewArcType,MemFileArea.CmtType,SQOutSp(FilePath+FileName));
|
||
Ok := TRUE;
|
||
END;
|
||
|
||
END;
|
||
|
||
FileName := SQOutSp(FileName);
|
||
|
||
IF (FAUseGIFSpecs IN MemFileArea.FAFlags) AND (IsGifExt(FileName)) THEN
|
||
Descr := GetGIFSpecs(FilePath+FileName,Descr,2);
|
||
|
||
END;
|
||
|
||
FUNCTION SearchForDups(CONST CompleteFN: Str12): Boolean;
|
||
VAR
|
||
WildFN,
|
||
NearFN: Str12;
|
||
SaveFileArea,
|
||
FArea,
|
||
FArrayRecNum: Integer;
|
||
AnyFound,
|
||
HadACC,
|
||
Thisboard,
|
||
CompleteMatch,
|
||
NearMatch: Boolean;
|
||
|
||
PROCEDURE SearchB(FArea1: Integer; VAR FArrayRecNum: Integer; CONST FN: Str12; VAR HadACC: Boolean);
|
||
VAR
|
||
DirFileRecNum: Integer;
|
||
BEGIN
|
||
HadACC := FileAreaAC(FArea1);
|
||
IF (NOT HadACC) OR (FANoDupeCheck IN MemFileArea.FAFlags) AND (NOT (FileArea = FArea1)) THEN
|
||
Exit;
|
||
FileArea := FArea1;
|
||
RecNo(FileInfo,FN,DirFileRecNum);
|
||
IF (BadDownloadPath) THEN
|
||
Exit;
|
||
WHILE (DirFileRecNum <> -1) DO
|
||
BEGIN
|
||
IF (NOT AnyFound) THEN
|
||
BEGIN
|
||
NL;
|
||
NL;
|
||
AnyFound := TRUE;
|
||
END;
|
||
Seek(FileInfoFile,DirFileRecNum);
|
||
Read(FileInfoFile,FileInfo);
|
||
IF (CanSee(FileInfo)) THEN
|
||
BEGIN
|
||
WITH FArray[FArrayRecNum] DO
|
||
BEGIN
|
||
FArrayFileArea := FileArea;
|
||
FArrayDirFileRecNum := DirFileRecNum;
|
||
END;
|
||
LDisplay_File(FileInfo,FArrayRecNum,'',TRUE);
|
||
Inc(FArrayRecNum);
|
||
IF (FArrayRecNum = 100) THEN
|
||
FArrayRecNum := 0;
|
||
END;
|
||
IF (Align(FileInfo.FileName) = Align(CompleteFN)) THEN
|
||
BEGIN
|
||
CompleteMatch := TRUE;
|
||
ThisBoard := TRUE;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
NearFN := Align(FileInfo.FileName);
|
||
NearMatch := TRUE;
|
||
ThisBoard := TRUE;
|
||
END;
|
||
NRecNo(FileInfo,DirFileRecNum);
|
||
END;
|
||
Close(FileInfoFile);
|
||
Close(ExtInfoFile);
|
||
FileArea := SaveFileArea;
|
||
InitFileArea(FileArea);
|
||
LastError := IOResult;
|
||
END;
|
||
|
||
BEGIN
|
||
SaveFileArea := FileArea;
|
||
InitFArray(FArray);
|
||
FArrayRecNum := 0;
|
||
AnyFound := FALSE;
|
||
Prompt('^5Searching for possible duplicates ... ');
|
||
SearchForDups := TRUE;
|
||
IF (Pos('.',CompleteFN) > 0) THEN
|
||
WildFN := Copy(CompleteFN,1,Pos('.',CompleteFN) - 1)
|
||
ELSE
|
||
WildFN := CompleteFN;
|
||
WildFn := SQOutSp(WildFN);
|
||
WHILE (WildFN[Length(WildFN)] IN ['0'..'9']) AND (Length(WildFN) > 2) DO
|
||
Dec(WildFN[0]);
|
||
WHILE (Length(WildFN) < 8) DO
|
||
WildFN := WildFN + '?';
|
||
WildFN := WildFN + '.???';
|
||
CompleteMatch := FALSE;
|
||
NearMatch := FALSE;
|
||
FArea := 1;
|
||
WHILE (FArea >= 1) AND (FArea <= NumFileAreas) AND (NOT HangUp) DO
|
||
BEGIN
|
||
Thisboard := FALSE;
|
||
SearchB(FArea,FArrayRecNum,WildFN,HadACC);
|
||
LoadFileArea(FArea);
|
||
IF (CompleteMatch) THEN
|
||
BEGIN
|
||
SysOpLog('User tried to upload '+SQOutSp(CompleteFN)+' to #'+IntToStr(SaveFileArea)+
|
||
'; existed in #'+IntToStr(FArea)+AOnOff(NOT HadACC,' - no access',''));
|
||
NL;
|
||
NL;
|
||
IF (HadACC) THEN
|
||
Print('^5File "'+SQOutSp(CompleteFN)+'" already exists in "'+MemFileArea.AreaName+'^5 #'+IntToStr(FArea)+'".')
|
||
ELSE
|
||
Print('^5File "'+SQOutSp(CompleteFN)+ 'cannot be accepted by the system at this time.');
|
||
Print('^7Illegal File Name.');
|
||
Exit;
|
||
END
|
||
ELSE IF (NearMatch) AND (Thisboard) THEN
|
||
BEGIN
|
||
SysOpLog('User entered upload file name "'+SQOutSp(CompleteFN)+'" in #'+
|
||
IntToStr(FileArea)+'; was warned that "'+SQOutSp(NearFN)+
|
||
'" existed in #'+IntToStr(FArea)+AOnOff(NOT HadACC,' - no access to',''));
|
||
END;
|
||
Inc(FArea);
|
||
END;
|
||
FileArea := SaveFileArea;
|
||
InitFileArea(FileArea);
|
||
IF (NOT AnyFound) THEN
|
||
Print('No duplicates found.');
|
||
NL;
|
||
SearchForDups := FALSE;
|
||
END;
|
||
|
||
(*
|
||
AExists : if file already exists in dir
|
||
DirFileRecNum : rec-num of file if already exists in file listing
|
||
ResumeFile : IF user is going to RESUME THE UPLOAD
|
||
ULS : whether file is to be actually UPLOADED
|
||
OffLine : IF uploaded a file to be OffLine automatically..
|
||
*)
|
||
|
||
PROCEDURE UL(FileName: Str12; LocBatUp: Boolean; VAR AddULBatch: Boolean);
|
||
VAR
|
||
fi: FILE OF Byte;
|
||
Cmd: Char;
|
||
Counter,
|
||
LineNum,
|
||
NumExtDesc: Byte;
|
||
DirFileRecNum,
|
||
SaveFileArea,
|
||
GotPts: Integer;
|
||
TransferTime,
|
||
RefundTime,
|
||
ConversionTime: LongInt;
|
||
ULS,
|
||
UploadOk,
|
||
KeyboardAbort,
|
||
Convt,
|
||
AExists,
|
||
ResumeFile,
|
||
WentToSysOp,
|
||
OffLine: Boolean;
|
||
BEGIN
|
||
SaveFileArea := FileArea;
|
||
InitFileArea(FileArea);
|
||
IF (BadUploadPath) THEN
|
||
Exit;
|
||
|
||
UploadOk := TRUE;
|
||
|
||
IF (FileName[1] = ' ') OR (FileName[10] = ' ') THEN
|
||
UploadOk := FALSE;
|
||
|
||
FOR Counter := 1 TO Length(FileName) DO
|
||
IF (Pos(FileName[Counter],'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.-!#$%^&''~()_') = 0) THEN
|
||
BEGIN
|
||
UploadOk := FALSE;
|
||
Break;
|
||
END;
|
||
|
||
IF (NOT UploadOk) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7Illegal file name specified!^1');
|
||
PauseScr(FALSE);
|
||
Exit;
|
||
END;
|
||
|
||
Abort := FALSE;
|
||
Next := FALSE;
|
||
|
||
ResumeFile := FALSE;
|
||
|
||
ULS := TRUE;
|
||
|
||
OffLine := FALSE;
|
||
|
||
AExists := Exist(MemFileArea.ULPath+FileName);
|
||
|
||
FileName := Align(FileName);
|
||
|
||
RecNo(FileInfo,FileName,DirFileRecNum);
|
||
IF (DirFileRecNum <> -1) THEN
|
||
BEGIN
|
||
Seek(FileInfoFile,DirFileRecNum);
|
||
Read(FileInfoFile,FileInfo);
|
||
ResumeFile := (FIResumeLater IN FileInfo.FIFlags);
|
||
IF (ResumeFile) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5Note: ^1This is a resume-later file.^1');
|
||
ResumeFile := (CRC32(FileInfo.OwnerName) = CRC32(ThisUser.Name)) OR (FileSysOp);
|
||
IF (ResumeFile) THEN
|
||
BEGIN
|
||
IF (NOT InCom) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7File upload can not be resumed locally!^1');
|
||
PauseScr(FALSE);
|
||
Exit;
|
||
END;
|
||
NL;
|
||
ResumeFile := PYNQ('Resume upload of "'+SQOutSp(FileName)+'"? ',0,TRUE);
|
||
IF (NOT ResumeFile) THEN
|
||
Exit;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
Print('^7You are not the uploader of this file!^1');
|
||
PauseScr(FALSE);
|
||
Exit;
|
||
END;
|
||
END;
|
||
END;
|
||
|
||
IF (NOT AExists) AND (FileSysOp) AND (NOT InCom) THEN
|
||
BEGIN
|
||
ULS := FALSE;
|
||
OffLine := TRUE;
|
||
NL;
|
||
Print('File does not exist in upload path: ^5'+MemFileArea.ULPath+SQOutSp(FileName)+'^1');
|
||
IF (DirFileRecNum <> -1) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5Note: ^1File exists in listing.^1');
|
||
END;
|
||
NL;
|
||
IF NOT PYNQ('Do you want to create an offline entry? ',0,FALSE) THEN
|
||
Exit;
|
||
END;
|
||
|
||
IF (NOT ResumeFile) THEN
|
||
BEGIN
|
||
|
||
IF (((AExists) OR (DirFileRecNum <> -1)) AND (NOT FileSysOp)) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7File already exists!^1');
|
||
Exit;
|
||
END;
|
||
IF (FileSize(FileInfoFile) >= MemFileArea.MaxFiles) THEN
|
||
BEGIN
|
||
NL;
|
||
Star('^7This file area is full!^1');
|
||
Exit;
|
||
END;
|
||
|
||
IF (NOT AExists) AND (NOT OffLine) THEN
|
||
IF (NOT CheckDriveSpace('Upload',MemFileArea.ULPath,General.MinSpaceForUpload)) THEN
|
||
Exit;
|
||
|
||
IF (AExists) THEN
|
||
BEGIN
|
||
ULS := FALSE;
|
||
NL;
|
||
Print('^1File exists in upload path: ^5'+MemFileArea.ULPath+SQOutSp(FileName));
|
||
IF (DirFileRecNum <> -1) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5Note: ^1File exists in listing.^1');
|
||
END;
|
||
|
||
IF (LocBatUp) THEN
|
||
BEGIN
|
||
NL;
|
||
Prompt('^7[Q]uit or Upload this? (Y/N) ['+SQOutSp(ShowYesNo(DirFileRecNum = -1))+']: ');
|
||
OneK(Cmd,'QYN'^M,FALSE,FALSE);
|
||
IF (DirFileRecNum <> -1) THEN
|
||
UploadOk := (Cmd = 'Y')
|
||
ELSE
|
||
UploadOk := (Cmd IN ['Y',^M]);
|
||
Abort := (Cmd = 'Q');
|
||
IF (Abort) THEN
|
||
Print('^3Quit')
|
||
ELSE IF (NOT UploadOk) THEN
|
||
Print('^3No')
|
||
ELSE
|
||
Print('^3Yes');
|
||
UserColor(1);
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
UploadOk := PYNQ('Upload this? (Y/N) ['+SQOutSp(ShowYesNo(DirFileRecNum = -1))+']: ',0,(DirFileRecNum = -1));
|
||
END;
|
||
DirFileRecNum := 0;
|
||
END;
|
||
|
||
IF (General.SearchDup) AND (UploadOk) AND (NOT Abort) AND (InCom) THEN
|
||
IF (NOT FileSysOp) OR (PYNQ('Search for duplicates? ',0,FALSE)) THEN
|
||
IF (SearchForDups(FileName)) THEN
|
||
Exit;
|
||
|
||
IF (ULS) THEN
|
||
BEGIN
|
||
NL;
|
||
UploadOk := PYNQ('Upload "^5'+SQOutSp(FileName)+'^7" to ^5'+MemFileArea.AreaName+'^7? ',0,TRUE);
|
||
END;
|
||
|
||
IF ((UploadOk) AND (ULS) AND (NOT ResumeFile)) THEN
|
||
BEGIN
|
||
|
||
Assign(fi,MemFileArea.ULPath+FileName);
|
||
ReWrite(fi);
|
||
IF (IOResult <> 0) THEN
|
||
UploadOk := FALSE
|
||
ELSE
|
||
BEGIN
|
||
Close(fi);
|
||
Erase(fi);
|
||
IF (IOResult <> 0) THEN
|
||
UploadOk := FALSE;
|
||
END;
|
||
|
||
IF (NOT UploadOk) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7Unable to upload that file name!^1');
|
||
Exit;
|
||
END;
|
||
END;
|
||
|
||
END;
|
||
|
||
IF (NOT UploadOk) THEN
|
||
Exit;
|
||
|
||
WentToSysOp := TRUE;
|
||
|
||
IF (NOT ResumeFile) THEN
|
||
BEGIN
|
||
FileInfo.FileName := Align(FileName);
|
||
GetFileDescription(FileInfo,ExtendedArray,NumExtDesc,WentToSysOp);
|
||
END;
|
||
|
||
UploadOk := TRUE;
|
||
|
||
IF (ULS) THEN
|
||
BEGIN
|
||
Receive(FileName,MemFileArea.ULPath,ResumeFile,UploadOk,KeyboardAbort,AddULBatch,TransferTime);
|
||
|
||
IF (AddULBatch) THEN
|
||
BEGIN
|
||
IF CheckBatchUL(FileName) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7This file is already in the batch upload queue!^1');
|
||
END
|
||
ELSE IF (NumBatchULFiles = General.MaxBatchULFiles) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^7The batch upload queue is full!^1');
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
Assign(BatchULFile,General.DataPath+'BATCHUL.DAT');
|
||
IF (NOT Exist(General.DataPath+'BATCHUL.DAT')) THEN
|
||
ReWrite(BatchULFile)
|
||
ELSE
|
||
Reset(BatchULFile);
|
||
WITH BatchUL DO
|
||
BEGIN
|
||
BULFileName := SQOutSp(FileName);
|
||
BULUserNum := UserNum;
|
||
|
||
BULSection := FileArea; (* Should this be CompFileArea ??? *)
|
||
|
||
BULDescription := FileInfo.Description;
|
||
|
||
IF (ExtendedArray[1] = '') THEN
|
||
BEGIN
|
||
BULVPointer := -1;
|
||
BULVTextSize := 0;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
Assign(BatchULF,General.DataPath+'BATCHUL.EXT');
|
||
IF (NOT Exist(General.DataPath+'BATCHUL.EXT')) THEN
|
||
ReWrite(BatchULF,1)
|
||
ELSE
|
||
Reset(BatchULF,1);
|
||
BULVPointer := (FileSize(BatchULF) + 1);
|
||
BULVTextSize := 0;
|
||
Seek(BatchULF,FileSize(BatchULF));
|
||
FOR LineNum := 1 TO NumExtDesc DO
|
||
IF (ExtendedArray[LineNum] <> '') THEN
|
||
BEGIN
|
||
Inc(BULVTextSize,(Length(ExtendedArray[LineNum]) + 1));
|
||
BlockWrite(BatchULF,ExtendedArray[LineNum],(Length(ExtendedArray[LineNum]) + 1));
|
||
END;
|
||
Close(BatchULF);
|
||
LastError := IOResult;
|
||
END;
|
||
|
||
Seek(BatchULFile,FileSize(BatchULFile));
|
||
Write(BatchULFile,BatchUL);
|
||
Close(BatchULFile);
|
||
LastError := IOResult;
|
||
|
||
Inc(NumBatchULFiles);
|
||
NL;
|
||
Print('^5File added to the batch upload queue.^1');
|
||
NL;
|
||
Star('^1Batch upload queue: ^5'+IntToStr(NumBatchULFiles)+' '+Plural('file',NumBatchULFiles));
|
||
SysOpLog('Batch UL Add: "^5'+BatchUL.BULFileName+'^1" to ^5'+MemFileArea.AreaName);
|
||
END;
|
||
END;
|
||
NL;
|
||
Star('^1Press <^5Enter^1> to stop adding to the batch upload queue.^1');
|
||
NL;
|
||
FileArea := SaveFileArea;
|
||
Exit;
|
||
END;
|
||
|
||
IF (KeyboardAbort) THEN
|
||
BEGIN
|
||
FileArea := SaveFileArea;
|
||
Exit;
|
||
END;
|
||
|
||
RefundTime := (TransferTime * (General.ULRefund DIV 100));
|
||
|
||
Inc(FreeTime,RefundTime);
|
||
|
||
NL;
|
||
|
||
END;
|
||
|
||
NL;
|
||
|
||
Convt := FALSE;
|
||
|
||
IF (NOT OffLine) THEN
|
||
BEGIN
|
||
|
||
Assign(fi,MemFileArea.ULPath+FileName);
|
||
Reset(fi);
|
||
IF (IOResult <> 0) THEN
|
||
UploadOk := FALSE
|
||
ELSE
|
||
BEGIN
|
||
FileInfo.FileSize := FileSize(fi);
|
||
IF (FileSize(fi) = 0) THEN
|
||
UploadOk := FALSE;
|
||
Close(fi);
|
||
|
||
END;
|
||
|
||
END;
|
||
|
||
IF ((UploadOk) AND (NOT OffLine)) THEN
|
||
BEGIN
|
||
|
||
ArcStuff(UploadOk,Convt,FileInfo.FileSize,ConversionTime,ULS,MemFileArea.ULPath,FileName,FileInfo.Description);
|
||
|
||
UpdateFileInfo(FileInfo,FileName,GotPts);
|
||
|
||
IF (General.FileDiz) AND (DizExists(MemFileArea.ULPath+FileName)) THEN
|
||
GetDiz(FileInfo,ExtendedArray,NumExtDesc);
|
||
|
||
IF (UploadOk) THEN
|
||
BEGIN
|
||
|
||
IF (AACS(General.ULValReq)) OR (General.ValidateAllFiles) THEN
|
||
Include(FileInfo.FIFlags,FIOwnerCredited);
|
||
|
||
IF (NOT ResumeFile) OR (DirFileRecNum = -1) THEN
|
||
WriteFV(FileInfo,FileSize(FileInfoFile),ExtendedArray)
|
||
ELSE
|
||
WriteFV(FileInfo,DirFileRecNum,ExtendedArray);
|
||
|
||
IF (ULS) THEN
|
||
BEGIN
|
||
|
||
IF (UploadsToday < 2147483647) THEN
|
||
Inc(UploadsToday);
|
||
|
||
IF ((UploadKBytesToday + (FileInfo.FileSize DIV 1024)) < 2147483647) THEN
|
||
Inc(UploadKBytesToday,(FileInfo.FileSize DIV 1024))
|
||
ELSE
|
||
UploadKBytesToday := 2147483647;
|
||
|
||
END;
|
||
|
||
SysOpLog('^3Uploaded: "^5'+SQOutSp(FileName)+'^3" on ^5'+MemFileArea.AreaName);
|
||
|
||
IF (ULS) THEN
|
||
|
||
|
||
SysOpLog('^3 ('+ConvertBytes(FileInfo.FileSize,FALSE)+', '+FormattedTime(TransferTime)+
|
||
', '+FormatNumber(GetCPS(FileInfo.FileSize,Transfertime))+' cps)');
|
||
|
||
IF ((InCom) AND (ULS)) THEN
|
||
BEGIN
|
||
|
||
Star('File size : ^5'+ConvertBytes(FileInfo.FileSize,FALSE));
|
||
|
||
Star('Upload time : ^5'+FormattedTime(TransferTime));
|
||
|
||
IF (Convt) THEN
|
||
Star('Convert time : ^5'+FormattedTime(ConversionTime));
|
||
|
||
Star('Transfer rate: ^5'+FormatNumber(GetCPS(FileInfo.FileSize,TransferTime))+' cps');
|
||
|
||
Star('Time refund : ^5'+FormattedTime(RefundTime));
|
||
|
||
IF (GotPts <> 0) THEN
|
||
Star('File Points : ^5'+FormatNumber(GotPts)+' pts');
|
||
|
||
IF (ChopTime > 0) THEN
|
||
BEGIN
|
||
Inc(ChopTime,RefundTime);
|
||
Dec(FreeTime,RefundTime);
|
||
NL;
|
||
Star('Sorry, no upload time refund may be given at this time.');
|
||
Star('You will get your refund after the event.');
|
||
NL;
|
||
END;
|
||
|
||
IF (NOT AACS(General.ULValReq)) AND (NOT General.ValidateAllFiles) THEN
|
||
BEGIN
|
||
IF (General.ULDLRatio) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5You will receive file credit as soon as the SysOp validates the file!')
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
NL;
|
||
Print('^5You will receive credit as soon as the SysOp validates the file!');
|
||
END;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
|
||
IF ((NOT General.ULDLRatio) AND (NOT General.FileCreditRatio) AND (GotPts = 0)) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('^5You will receive credit as soon as the Sysop validates the file!')
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
|
||
IF (ThisUser.Uploads < 2147483647) THEN
|
||
Inc(ThisUser.Uploads);
|
||
|
||
IF ((ThisUser.UK + (FileInfo.FileSize DIV 1024)) < 2147483647) THEN
|
||
Inc(ThisUser.UK,(FileInfo.FileSize DIV 1024))
|
||
ELSE
|
||
ThisUser.UK := 2147483647;
|
||
|
||
IF ((ThisUser.FilePoints + GotPts) < 2147483647) THEN
|
||
Inc(ThisUser.FilePoints,GotPts)
|
||
ELSE
|
||
ThisUser.FilePoints := 2147483647;
|
||
|
||
END;
|
||
END;
|
||
|
||
|
||
NL;
|
||
Print('^5Thanks for the file, '+Caps(ThisUser.Name)+'!');
|
||
PauseScr(FALSE);
|
||
|
||
END
|
||
ELSE
|
||
Star('Entry added.');
|
||
END;
|
||
END;
|
||
|
||
IF (NOT UploadOk) AND (NOT OffLine) THEN
|
||
BEGIN
|
||
|
||
IF (Exist(MemFileArea.ULPath+FileName)) THEN
|
||
BEGIN
|
||
|
||
Star('Upload not received.');
|
||
|
||
IF ((FileInfo.FileSize DIV 1024) >= General.MinResume) THEN
|
||
BEGIN
|
||
NL;
|
||
IF PYNQ('Save file for a later resume? ',0,TRUE) THEN
|
||
BEGIN
|
||
|
||
UpdateFileInfo(FileInfo,FileName,GotPts);
|
||
|
||
Include(FileInfo.FIFlags,FIResumeLater);
|
||
|
||
IF (NOT AExists) OR (DirFileRecNum = -1) THEN
|
||
WriteFV(FileInfo,FileSize(FileInfoFile),ExtendedArray)
|
||
ELSE
|
||
WriteFV(FileInfo,DirFileRecNum,ExtendedArray);
|
||
|
||
END;
|
||
END;
|
||
|
||
IF (NOT (FIResumeLater IN FileInfo.FIFlags)) AND (Exist(MemFileArea.ULPath+FileName)) THEN
|
||
Kill(MemFileArea.ULPath+FileName);
|
||
|
||
SysOpLog('^3Error uploading '+SQOutSp(FileName)+
|
||
' - '+AOnOff(FIResumeLater IN FileInfo.FIFlags,'file saved for later resume','file deleted'));
|
||
END;
|
||
|
||
Star('Removing time refund of '+FormattedTime(RefundTime));
|
||
|
||
Dec(FreeTime,RefundTime);
|
||
END;
|
||
|
||
IF (OffLine) THEN
|
||
BEGIN
|
||
FileInfo.FileSize := 0;
|
||
UpdateFileInfo(FileInfo,FileName,GotPts);
|
||
Include(FileInfo.FIFlags,FIIsRequest);
|
||
WriteFV(FileInfo,FileSize(FileInfoFile),ExtendedArray);
|
||
END;
|
||
|
||
Close(FileInfoFile);
|
||
Close(ExtInfoFile);
|
||
|
||
FileArea := SaveFileArea;
|
||
InitFileArea(FileArea);
|
||
|
||
SaveURec(ThisUser,UserNum);
|
||
END;
|
||
|
||
PROCEDURE UploadFile;
|
||
VAR
|
||
FileName: Str12;
|
||
AddULBatch: Boolean;
|
||
BEGIN
|
||
InitFileArea(FileArea);
|
||
IF (BadUploadPath) THEN
|
||
Exit;
|
||
IF (NOT AACS(MemFileArea.ULACS)) THEN
|
||
BEGIN
|
||
NL;
|
||
Star('Your access level does not permit uploading to this file area.');
|
||
Exit;
|
||
END;
|
||
PrintF('UPLOAD');
|
||
IF (NumBatchULFiles > 0) THEN
|
||
BEGIN
|
||
NL;
|
||
IF PYNQ('Upload queued files? ',0,FALSE) THEN
|
||
BEGIN
|
||
BatchUpload(FALSE,0);
|
||
Exit;
|
||
END;
|
||
END;
|
||
REPEAT
|
||
AddULBatch := FALSE;
|
||
{
|
||
NL;
|
||
Print(FString.UploadLine);
|
||
NL;
|
||
Prt('File name: ');
|
||
}
|
||
lRGLngStr(24,FALSE);
|
||
MPL(12);
|
||
Input(FileName,12);
|
||
FileName := SQOutSp(FileName);
|
||
IF (FileName = '') THEN
|
||
BEGIN
|
||
NL;
|
||
Print('Aborted.');
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
IF (NOT FileSysOp) THEN
|
||
UL(FileName,FALSE,AddULBatch)
|
||
ELSE
|
||
BEGIN
|
||
IF (NOT IsWildCard(FileName)) THEN
|
||
UL(FileName,FALSE,AddULBatch)
|
||
ELSE
|
||
BEGIN
|
||
FindFirst(MemFileArea.ULPath+FileName,AnyFile - Directory - VolumeID - Hidden - SysFile,DirInfo);
|
||
IF (DOSError <> 0) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('No files found.');
|
||
END
|
||
ELSE
|
||
REPEAT
|
||
UL(DirInfo.Name,TRUE,AddULBatch);
|
||
FindNext(DirInfo);
|
||
UNTIL (DOSError <> 0) OR (Abort) OR (HangUp);
|
||
END;
|
||
END;
|
||
END;
|
||
UNTIL (NOT AddUlBatch) OR (HangUp);
|
||
END;
|
||
|
||
PROCEDURE LFileAreaList(VAR FArea,NumFAreas: Integer; AdjPageLen: Byte; ShowScan: Boolean);
|
||
VAR
|
||
ScanChar: Str1;
|
||
TempStr: AStr;
|
||
NumOnline,
|
||
NumDone: Byte;
|
||
SaveFileArea: Integer;
|
||
BEGIN
|
||
SaveFileArea := FileArea;
|
||
Abort := FALSE;
|
||
Next := FALSE;
|
||
NumOnline := 0;
|
||
TempStr := '';
|
||
|
||
FillChar(LightBarArray,SizeOf(LightBarArray),0);
|
||
LightBarCounter := 0;
|
||
|
||
{
|
||
$New_Scan_Char_File
|
||
<20>
|
||
$
|
||
}
|
||
IF (ShowScan) THEN
|
||
ScanChar := lRGLngStr(55,TRUE);
|
||
{
|
||
%CL-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||
-<2D>. Num -<2D>/ Name -<2D>. Num -<2D>/ Name -<2D>
|
||
-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
lRGLngStr(59,FALSE);
|
||
Reset(FileAreaFile);
|
||
NumDone := 0;
|
||
WHILE (NumDone < (PageLength - AdjPageLen)) AND (FArea >= 1) AND (FArea <= NumFileAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
||
BEGIN
|
||
LoadFileArea(FArea);
|
||
IF (ShowScan) THEN
|
||
LoadNewScanFile(NewScanFileArea);
|
||
IF AACS(MemFileArea.ACS) OR (FAUnHidden IN MemFileArea.FAFlags) THEN
|
||
BEGIN
|
||
|
||
IF (General.UseFileAreaLightBar) AND (FileAreaLightBar IN ThisUser.SFlags) THEN
|
||
BEGIN
|
||
Inc(LightBarCounter);
|
||
LightBarArray[LightBarCounter].CmdToExec := CompFileArea(FArea,0);
|
||
LightBarArray[LightBarCounter].CmdToShow := MemFileArea.AreaName;
|
||
IF (NumOnline = 0) THEN
|
||
BEGIN
|
||
LightBarArray[LightBarCounter].Xpos := 8;
|
||
LightBarArray[LightBarCounter].YPos := WhereY;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
LightBarArray[LightBarCounter].Xpos := 47;
|
||
LightBarArray[LightBarCounter].YPos := WhereY;
|
||
END;
|
||
END;
|
||
|
||
TempStr := TempStr + AOnOff(ShowScan AND NewScanFileArea,'0'+ScanChar[1],' ')+
|
||
PadLeftStr(PadRightStr('1'+IntToStr(CompFileArea(FArea,0)),5)+
|
||
+'2 '+MemFileArea.AreaName,37)+' ';
|
||
Inc(NumOnline);
|
||
IF (NumOnLine = 2) THEN
|
||
BEGIN
|
||
PrintACR(TempStr);
|
||
NumOnline := 0;
|
||
Inc(NumDone);
|
||
TempStr := '';
|
||
END;
|
||
Inc(NumFAreas);
|
||
END;
|
||
WKey;
|
||
Inc(FArea);
|
||
END;
|
||
Close(FileAreaFile);
|
||
LastError := IOResult;
|
||
IF (NumOnline = 1) AND (NOT Abort) AND (NOT HangUp) THEN
|
||
PrintACR(TempStr)
|
||
ELSE IF (NumFAreas = 0) AND (NOT Abort) AND (NOT HangUp) THEN
|
||
LRGLngStr(67,FALSE);
|
||
{
|
||
%LF^7No file areas!^1
|
||
}
|
||
FileArea := SaveFileArea;
|
||
LoadFileArea(FileArea);
|
||
END;
|
||
|
||
PROCEDURE UnlistedDownload(FileName: AStr);
|
||
VAR
|
||
User: UserRecordType;
|
||
TransferFlags: TransferFlagSet;
|
||
DS: DirStr;
|
||
NS: NameStr;
|
||
ES: ExtStr;
|
||
SaveFileArea: Integer;
|
||
BEGIN
|
||
IF (FileName <> '') THEN
|
||
IF (NOT Exist(FileName)) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('File not found.');
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
SaveFileArea := FileArea;
|
||
FileArea := -1;
|
||
Abort := FALSE;
|
||
Next := FALSE;
|
||
LoadURec(User,1);
|
||
FSplit(FileName,DS,NS,ES);
|
||
FindFirst(SQOutSp(FileName),AnyFile - Directory - VolumeID - Hidden - SysFile,DirInfo);
|
||
WHILE (DOSError = 0) AND (NOT Abort) AND (NOT HangUp) DO
|
||
BEGIN
|
||
WITH MemFileArea DO
|
||
BEGIN
|
||
AreaName := 'Unlisted Download';
|
||
DLPath := DS;
|
||
ULPath := DS;
|
||
FAFlags := [FANoRatio];
|
||
END;
|
||
WITH FileInfo DO
|
||
BEGIN
|
||
FileName := Align(DirInfo.Name);
|
||
Description := 'Unlisted Download';
|
||
FilePoints := 0;
|
||
Downloaded := 0;
|
||
FileSize := DirInfo.Size;
|
||
OwnerNum := 1;
|
||
OwnerName := Caps(User.Name);
|
||
FileDate := Date2PD(DateStr);
|
||
VPointer := -1;
|
||
VTextSize := 0;
|
||
FIFlags := [];
|
||
END;
|
||
TransferFlags := [IsUnlisted];
|
||
IF (InCom) THEN
|
||
BEGIN
|
||
NL;
|
||
IF (PYNQ('Is this file located on a CDRom? ',0,FALSE)) THEN
|
||
Include(MemFileArea.FAFlags,FACDROm);
|
||
END;
|
||
DLX(FileInfo,-1,TransferFlags);
|
||
IF (IsKeyboardAbort IN Transferflags) THEN
|
||
Abort := TRUE;
|
||
FindNext(DirInfo);
|
||
END;
|
||
FileArea := SaveFileArea;
|
||
LoadFileArea(FileArea);
|
||
END;
|
||
END;
|
||
|
||
PROCEDURE Do_Unlisted_Download;
|
||
VAR
|
||
PathFileName: Str52;
|
||
BEGIN
|
||
NL;
|
||
Print('Enter file name to download (d:path\filename.ext)');
|
||
Prt(': ');
|
||
MPL(52);
|
||
Input(PathFileName,52);
|
||
IF (PathFileName = '') THEN
|
||
BEGIN
|
||
NL;
|
||
Print('Aborted.');
|
||
END
|
||
ELSE IF (NOT IsUL(PathFileName)) THEN
|
||
BEGIN
|
||
NL;
|
||
Print('You must specify the complete path to the file.');
|
||
END
|
||
ELSE
|
||
UnlistedDownload(PathFileName)
|
||
END;
|
||
|
||
END.
|