Program FixBBSL;

Uses
  Dos,
  Crt,
  Common,
  BBSList;

Type

  UnixTime = Longint;

  OldBBSListRecordType =          { *.BBS file records }
    {$IFDEF WIN32} PACKED {$ENDIF} RECORD
    RecordNum    : LongInt;    { Number OF the Record For Edit }
    UserID       : LongInt;    { User ID OF person adding this }
    BBSName      : STRING[30]; { Name OF BBS                   }
    SysOpName    : STRING[30]; { SysOp OF BBS                  }
    TelnetUrl    : STRING[60]; { Telnet Urls                   }
    WebSiteUrl   : STRING[60]; { Web Site Url                  }
    PhoneNumber  : STRING[20]; { Phone number OF BBS           }
    Software     : STRING[8];  { Software used by BBS          }
    Speed        : STRING[8];  { Highest connect speed OF BBS  }
    Description  : STRING[60]; { Description OF BBS            }
    Description2 : STRING[60]; { Second line OF descrition     }
    DateAdded    : UnixTime;   { Date entry was added          }
    DateEdited   : UnixTime;   { Date entry was last edited    }
    XA           : STRING[8];  { sysop definable A             }
    XB           : STRING[30]; { sysop definable B             }
    XC           : STRING[30]; { sysop definable C             }
    XD           : STRING[40]; { sysop definable D             }
    XE           : STRING[60]; { sysop definable E             }
    XF           : STRING[60]; { sysop definable F             }
  END;

  NewBBSListRecordType =          { New *.BBS file records     }
    {$IFDEF WIN32} PACKED {$ENDIF} RECORD
    RecordNum,                    { Number OF the Record For Edit }
    UserID,                       { User ID OF person adding this }
    MaxNodes        : LongInt;    { Maximum Number Of Nodes       }
    Port            : Word;       { Telnet Port                   }
    BBSName         : STRING[30]; { Name OF BBS                   }
    SysOpName       : STRING[30]; { SysOp OF BBS                  }
    TelnetUrl       : STRING[60]; { Telnet Urls                   }
    WebSiteUrl      : STRING[60]; { Web Site Url                  }
    PhoneNumber     : STRING[20]; { Phone number OF BBS           }
    Location        : STRING[30]; { Location of BBS               }
    Software,                     { Software used by BBS          }
    SoftwareVersion : String[12]; { Software Version of BBS       }
    OS              : STRING[20]; { Operating System of BBS       }
    Speed           : STRING[8];  { Highest connect speed OF BBS  }
    Hours           : STRING[20]; { Hours of Operation            }
    Birth           : STRING[10]; { When The BBS Began            }
    Description     : STRING[60]; { Description OF BBS            }
    Description2    : STRING[60]; { Second line OF descrition     }
    DateAdded       : UnixTime;   { Date entry was added          }
    DateEdited      : UnixTime;   { Date entry was last edited    }
    SDA             : STRING[8];  { sysop definable A             }
    SDB             : STRING[30]; { sysop definable B             }
    SDC             : STRING[30]; { sysop definable C             }
    SDD             : STRING[40]; { sysop definable D             }
    SDE             : STRING[60]; { sysop definable E             }
    SDF             : STRING[60]; { sysop definable F             }
    SDG             : Word;       { sysop definable G             }
    SDH,                          { sysop definable H             }
    SDI             : Boolean;    { sysop definable I             }
  END;


Var

  OldBBSFile    : File Of OldBBSListRecordType;
  OldBBSDat     : OldBBSListRecordType;

  BBSFile       : File Of NewBBSListRecordType;
  BBSDat        : NewBBSListRecordType;

  i             : Integer;

  TempFile,
  Dir,
  BBSListDat    : String;


Function GetDataFile : String;
Var
  Old : String;
Begin
 GetDir(0,BBSListDat);
 BBSListDat := BBSListDat+'\DATA\BBSLIST.DAT';
 GetDir(0,Old);
 Old := Old+'\DATA\BBSLIST.OLD';
 If Exist(Old) Then
  Begin
   WriteLn;
   TextColor(12);
   Write(' ', Old);
   TextColor(4);
   WriteLn(' exists. ');
   TextColor(7);
   WriteLn(' It seems you have already run this program.  ');
   TextColor(7);
   WriteLn(' There is no need to run it again.');
   WriteLn;
   Halt;
  End
 Else If Exist(BBSListDat) Then
  Begin
   GetDataFile := BBSListDat;
   Exit;
  End
 Else
  Begin
   WriteLn;
   TextColor(12);
   Write(' ',BBSListDat);
   TextColor(4);
   WriteLn(' doesn''t exist');
   TextColor(7);
   WriteLn(' Run this from inside your RENEGADE Home Dir.');
   WriteLn;
   Halt;
  End;
End;

Begin { Main Program }

BBSListDat := GetDataFile; { Get BBSLIST.DAT or Quit }

TempFile := 'DATA\BBSTEMP.DAT';

           Assign(OldBBSFile, BBSListDat);
           Assign(BBSFile, TempFile);
           Reset(OldBBSFile);
           Rewrite(BBSFile);
           Seek(OldBBSFile, 0);
           Seek(BBSFile, 0);
           WriteLn;
           TextColor(3);
           Write(' Converting Old BBS Records ');

For i := 1 to FileSize(OldBBSFile) Do
 Begin
   Delay(200);
   TextColor(11);
   Write('.');
   Read(OldBBSFile, OldBBSDat);

   BBSDat.RecordNum     := OldBBSDat.RecordNum;
   BBSDat.UserID        := OldBBSDat.UserID;
   BBSDat.BBSName       := OldBBSDat.BBSName;
   BBSDat.SysOpName     := OldBBSDat.SysOpName;
   BBSDat.TelnetUrl     := OldBBSDat.TelnetUrl;
   BBSDat.WebSiteUrl    := OldBBSDat.WebSiteUrl;
   BBSDat.PhoneNumber   := OldBBSDat.PhoneNumber;
   BBSDat.Software      := OldBBSDat.Software;
   BBSDat.Speed         := OldBBSDat.Speed;
   BBSDat.Description   := OldBBSDat.Description;
   BBSDat.Description2  := OldBBSDat.Description2;
   BBSDat.DateAdded     := OldBBSDat.DateAdded;
   BBSDat.DateEdited    := OldBBSDat.DateEdited;
   BBSDat.SDA           := OldBBSDat.XA;
   BBSDat.SDB           := OldBBSDat.XB;
   BBSDat.SDC           := OldBBSDat.XC;
   BBSDat.SDD           := OldBBSDat.XD;
   BBSDat.SDE           := OldBBSDat.XE;
   BBSDat.SDF           := OldBBSDat.XF;

  Write(BBSFile, BBSDat);

  Seek(OldBBSFile, i);
  Seek(BBSFile, i);

 End;
TextColor(3);
WriteLn(' Done!');

GetDir(0,Dir);

WriteLn;
TextColor(3);
Write(' Copying ');
TextColor(11);
Write(Dir,'\DATA\BBSLIST.DAT ');
TextColor(3);
Write('to ');
TextColor(11);
Write(Dir,'\DATA\BBSLIST.OLD ');
TextColor(3);
Write('...');

Rename(OldBBSFile,Dir+'\DATA\BBSLIST.OLD');

TextColor(3);
WriteLn(' Done!');

TextColor(3);
Write(' Moving  ');
TextColor(11);
Write(Dir,'\DATA\BBSTEMP.DAT ');
TextColor(3);
Write('to ');
TextColor(11);
Write(Dir,'\DATA\BBSLIST.DAT ');
TextColor(3);
Write('...');

Rename(BBSFile,Dir+'\DATA\BBSLIST.DAT');

TextColor(3);
WriteLn(' Done!');
WriteLn;

Close(OldBBSFile);
Close(BBSFile);

End.
