223 lines
5.7 KiB
Plaintext
223 lines
5.7 KiB
Plaintext
|
{$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.
|