Renegade-1.19/RGUPDT3.PAS

223 lines
5.7 KiB
Plaintext
Raw Normal View History

2013-02-04 15:56:58 -08:00
{$M 49152,0,65536}
PROGRAM RGUPDT3;
USES
Crt,
Dos,
TimeFunc;
{$I RECORDS.PAS}
CONST
DYNY: BOOLEAN = FALSE;
TYPE
OldFileInfoFlagType =
(OldFINotVal, { If file is not validated }
OldFIIsRequest, { If file is REQUEST }
OldFIResumeLater, { If file is RESUME-LATER }
OldFIHatched); { Has file been hatched? }
OldFIFlagSet = SET OF OldFileInfoFlagType;
OldFileInfoRecordType = { *.DIR : File records }
{$IFDEF WIN32} PACKED {$ENDIF} RECORD
FileName: STRING[12]; { Filename }
Description: STRING[50]; { File description }
FilePoints: Integer; { File points }
Downloaded: LongInt; { Number DLs }
SizeMod: Byte; { # chars over last 128 Byte block }
Blocks: LongInt; { # 128 Byte blks }
OwnerNum: Integer; { ULer OF file }
OwnerName: STRING[36]; { ULer's name }
Date: UnixTime; { Date ULed }
DateN: Word; { Numeric date ULed - 01/01/85 - 07/26/3061 = 0-65535 }
VPointer: LongInt; { Pointer to verbose descr, -1 if none }
VTextSize: Integer; { Verbose descr textsize - 50 Bytes x 99 Lines = 4950 max }
OldFIFlags: OldFIFlagSet; { File status }
END;
function sqoutsp(s:string):string;
begin
while (pos(' ',s)>0) do delete(s,pos(' ',s),1);
sqoutsp:=s;
end;
function exist(fn: astr): boolean;
var
srec: searchrec;
begin
findfirst(sqoutsp(fn),anyfile,srec);
exist := (doserror = 0);
end;
FUNCTION SYN(B: BOOLEAN): STRING;
BEGIN
IF (B) THEN
SYN := 'Yes'
ELSE
SYN := 'No ';
END;
FUNCTION YN: BOOLEAN;
VAR
C: CHAR;
BEGIN
Write(SQOutSp(SYN(DYNY)));
REPEAT
C := UpCase(Char(ReadKey));
UNTIL (C IN ['Y','N',^M]);
IF (DYNY) AND (C <> 'N') THEN
C := 'Y';
IF (DYNY) AND (C = 'N') THEN
Write(#8#8#8'No ')
ELSE IF (NOT DYNY) AND (C = 'Y') THEN
Write(#8#8'Yes');
WriteLn;
YN := (C = 'Y');
DYNY := FALSE;
end;
FUNCTION PYNQ(CONST S: AStr): BOOLEAN;
BEGIN
Write(S);
PYNQ := YN;
END;
FUNCTION Caps(s: STRING): STRING;
VAR
Counter: Integer; { must be Integer }
BEGIN
IF (s[1] IN ['a'..'z']) THEN
Dec(s[1],32);
FOR Counter := 2 TO Length(s) DO
IF (s[Counter - 1] IN ['a'..'z','A'..'Z']) THEN
IF (s[Counter] IN ['A'..'Z']) THEN
Inc(s[Counter],32)
ELSE
ELSE
IF (s[Counter] IN ['a'..'z']) THEN
Dec(s[Counter],32);
Caps := s;
END;
FUNCTION IntToStr(L: LongInt): STRING;
VAR
S: STRING[11];
BEGIN
Str(L,S);
IntToStr := S;
END;
PROCEDURE ReadDirFile(DirPath,FName: AStr);
VAR
OldDirFile: FILE OF OldFileInfoRecordType;
DirFile: FILE OF FileInfoRecordType;
OldDir: OldFileInfoRecordType;
Dir: FileInfoRecordType;
RecNum: Integer;
BEGIN
IF (Exist(DirPath+FName+'.DIR')) THEN
BEGIN
Assign(OldDirFile,DirPath+FName+'.DIR');
Reset(OldDirFile);
Assign(DirFile,DirPath+FName+'.NEW');
ReWrite(DirFile);
RecNum := 0;
WHILE (RecNum <= (FileSize(OldDirFile) - 1)) DO
BEGIN
Seek(OldDirFile,RecNum);
Read(OldDirFile,OldDir);
WITH DIR DO
BEGIN
FileName := OldDir.FileName;
Description := OldDir.Description;
FilePoints := OldDir.FilePoints;
Downloaded := OldDir.Downloaded;
FileSize := ((OldDir.Blocks * 128) + OldDir.SizeMod);
OwnerNum := OldDir.OwnerNum;
OwnerName := OldDir.OwnerName;
FileDate := OldDir.Date;
VPointer := OldDir.VPointer;
VTextSize := OldDir.VTextSize;
FIFlags := [];
IF (OldFINotVal IN OldDir.OldFIFlags) THEN
Include(FIFlags,FINotVal);
IF (OldFIIsRequest IN OldDir.OldFIFlags) THEN
Include(FIFlags,FIIsRequest);
IF (OldFIResumeLater IN OldDir.OldFIFlags) THEN
Include(FIFlags,FIResumeLater);
IF (OldFIHatched IN OldDir.OldFIFlags) THEN
Include(FIFlags,FIHatched);
END;
Write(DirFile,Dir);
Inc(RecNum);
END;
Close(OldDirFile);
Close(DirFile);
Assign(OlDDirFile,DirPath+FName+'.DIR');
Erase(OlDDirFile);
Assign(DirFile,DirPath+FName+'.NEW');
ReName(DirFile,DirPath+FName+'.DIR');
END;
END;
PROCEDURE ConvertFileInfoRec(General: GeneralRecordType);
VAR
FileAreaFile: FILE OF FileAreaRecordType;
FileArea: FileAreaRecordType;
DirPath: STRING;
Counter: Integer;
BEGIN
Write('Converting "*.DIR" files ... ');
Assign(FileAreaFile,General.DataPath+'FBASES.DAT');
Reset(FileAreaFile);
Counter := 0;
WHILE (Counter <= (FileSize(FileAreaFile) - 1)) DO
BEGIN
Seek(FileAreaFile,Counter);
Read(FileAreaFile,FileArea);
WITH FileArea DO
BEGIN
IF (FADirDLPath IN FileArea.FAFlags) THEN
DIRPath := FileArea.DLPath
ELSE
DIRPath := General.DataPath;
ReadDirFile(DirPath,FileArea.FileName);
END;
Inc(Counter);
END;
Close(FileAreaFile);
WriteLn('Done');
END;
VAR
GeneralFile: FILE OF GeneralRecordType;
General: GeneralRecordType;
BEGIN
ClrScr;
WriteLn('Renegade Update Utility (??.??/? to 10.01/8)');
WriteLn;
Writeln('This utility will upgrade your Renegade BBS from');
WriteLn('Version ??.??/? to Version 10.01/8.');
WriteLn;
IF PYNQ('Do you wish to continue? ') THEN
BEGIN
WriteLn;
Write('Reading "RENEGADE.DAT" file ... ');
Assign(GeneralFile,'RENEGADE.DAT');
Reset(GeneralFile);
Read(GeneralFile,General);
Close(GeneralFile);
WriteLn('Done');
WriteLn;
ConvertFileInfoRec(General);
WriteLn;
WriteLn('Conversion complete!');
WriteLn;
WriteLn('Please replace your old RENEGADE.EXE/RENEGADE.OVR files');
WriteLn('with the new files provided with this update.');
END;
END.