New file base editor, restructure of File Base records, ANSI template for file lists are now configurable per file base. ACS max length increased. Base flags are now bitmapped and not booleans

This commit is contained in:
mysticbbs 2012-02-26 06:10:54 -05:00
parent 26d2da196e
commit de10a9193d
13 changed files with 405 additions and 264 deletions

View File

@ -13,6 +13,25 @@ Uses
{$I RECORDS.PAS} {$I RECORDS.PAS}
Type Type
OldFBaseRec = Record { FBASES.DAT }
Name : String[40]; { File base name }
FtpName : String[60]; { FTP directory name }
Filename : String[40]; { File name }
DispFile : String[20]; { Pre-list display file name }
Template : String[20]; { ansi file list template }
ListACS, { ACS required to see this base }
FtpACS, { ACS to see in FTP directory }
SysopACS, { ACS required for SysOp functions}
ULACS, { ACS required to upload files }
DLACS : String[mysMaxAcsSize]; { ACS required to download files }
Path : String[120]; { Path where files are stored }
Password : String[20]; { Password to access this base }
DefScan : Byte; { Default New Scan Setting }
ShowUL : Boolean;
IsCDROM : Boolean;
IsFREE : Boolean;
End;
OldFDirRec = Record { *.DIR } OldFDirRec = Record { *.DIR }
FileName : String[70]; { File name } FileName : String[70]; { File name }
Size : LongInt; { File size (in bytes) } Size : LongInt; { File size (in bytes) }
@ -1021,21 +1040,74 @@ Begin
FindClose(DirInfo); FindClose(DirInfo);
End; End;
Procedure ConvertFileBases;
Var
FBase : RecFileBase;
FBaseFile : File of RecFileBase;
OldFBase : OldFBaseRec;
OldFBaseFile : File of OldFBaseRec;
Begin
WriteLn ('[-] Updating file bases...');
If Not ReNameFile(Config.DataPath + 'fbases.dat', Config.DataPath + 'fbases.old') Then Begin
WriteLn('[!] UNABLE TO FIND: ' + Config.DataPath + 'fbases.dat');
Exit;
End;
Assign (OldFBaseFile, Config.DataPath + 'fbases.old');
Reset (OldFBaseFile);
Assign (FBaseFile, Config.DataPath + 'fbases.dat');
ReWrite (FBaseFile);
While Not Eof(OldFBaseFile) Do Begin
Read (OldFBaseFile, OldFBase);
FBase.Name := OldFBase.Name;
FBase.FtpName := OldFBase.FtpName;
FBase.FileName := OldFBase.FileName;
FBase.DispFile := OldFBase.DispFile;
FBase.Template := 'ansiflst';
FBase.ListACS := OldFBase.ListACS;
FBase.FtpACS := OldFBase.FtpACS;
FBase.DLACS := OldFBase.DLACS;
FBase.ULACS := OldFBase.ULACS;
FBase.SysopACS := OldFBase.SysopACS;
FBase.Path := OldFBase.Path;
FBase.Password := OldFBase.Password;
FBase.DefScan := OldFBase.DefScan;
FBase.CommentACS := 's20';
FBase.Flags := 0;
If OldFBase.ShowUL Then FBase.Flags := FBase.Flags OR FBShowUpload;
If OldFBase.IsCDROM Then FBase.Flags := FBase.Flags OR FBSlowMedia;
If OldFBase.IsFREE Then FBase.Flags := FBase.Flags OR FBFreeFiles;
Write (FBaseFile, FBase);
End;
Close (FBaseFile);
Close (OldFBaseFile);
DeleteFile (Config.DataPath + 'fbases.old');
End;
Var Var
ConfigFile : File of RecConfig; ConfigFile : File of RecConfig;
Begin Begin
WarningDisplay; WarningDisplay;
// COMMENT this out if mystic.dat is being converted: //COMMENT this out if mystic.dat is being converted:
// Assign (ConfigFile, 'mystic.dat'); Assign (ConfigFile, 'mystic.dat');
// Reset (ConfigFile); Reset (ConfigFile);
// Read (ConfigFile, Config); Read (ConfigFile, Config);
// Close (ConfigFile); Close (ConfigFile);
ConvertConfig; //1.10a11 // ConvertConfig; //1.10a11
// ConvertUsers; //1.10a11 // ConvertUsers; //1.10a11
//ConvertSecurity; //1.10a11 //ConvertSecurity; //1.10a11
//ConvertFileLists; //1.10a11 //ConvertFileLists; //1.10a11
ConvertFileBases; //1.10a11
// ConvertArchives; //1.10a1 // ConvertArchives; //1.10a1
// ConvertGroups; //1.10a1 // ConvertGroups; //1.10a1

View File

@ -3857,3 +3857,19 @@
+ The END key now functions in the lightbar file listing. It is kind of a + The END key now functions in the lightbar file listing. It is kind of a
half-assed implementation though, since doing it "the right way" will half-assed implementation though, since doing it "the right way" will
involve some extra coding in the future. involve some extra coding in the future.
+ File Base settings for all ACS strings has been increased from 20 to 30
characters.
+ File base "lightbar" list templates are now defined per file base in
the file base editor. The upgrade utility will set existing bases to
'ansiflst' but any newly created bases will need to have this value set
per base now.
+ Updated file base record structures and added options for the possible
future "Comment and Rating" system for file bases. In addition, some
boolean data has been changed into a bitmapped flag variable.
+ Added new ANSI file base editor into the System Configuration.
+ Added Copy/Paste functions into all new ANSI internal editors.

View File

@ -418,6 +418,8 @@ Begin
If (A < 0) or (Picked = 1) Then A := 0; If (A < 0) or (Picked = 1) Then A := 0;
WriteXY (X1 + Width + 1, Y1 + 1 + A, Box.BoxAttr2, #178); WriteXY (X1 + Width + 1, Y1 + 1 + A, Box.BoxAttr2, #178);
End; End;
Session.io.BufFlush;
End; End;
Procedure TAnsiMenuList.Open (BX1, BY1, BX2, BY2 : Byte); Procedure TAnsiMenuList.Open (BX1, BY1, BX2, BY2 : Byte);
@ -515,6 +517,7 @@ Begin
End; End;
If Picked < ListMax Then Inc (Picked); If Picked < ListMax Then Inc (Picked);
If Picked > TopPage + WinSize - 1 Then Inc (TopPage); If Picked > TopPage + WinSize - 1 Then Inc (TopPage);
Update;
End Else End Else
If Pos(Ch, LoChars) > 0 Then Begin If Pos(Ch, LoChars) > 0 Then Begin
ExitCode := Ch; ExitCode := Ch;

View File

@ -4,164 +4,191 @@ Unit bbs_cfg_FileBase;
Interface Interface
Procedure File_Base_Editor; Procedure Configuration_FileBaseEditor;
Implementation Implementation
Uses Uses
m_FileIO,
m_Strings, m_Strings,
m_FileIO,
bbs_Ansi_MenuBox,
bbs_Ansi_MenuForm,
bbs_Common, bbs_Common,
bbs_Core, bbs_cfg_Common;
bbs_User;
Procedure File_Base_Editor;
Const
ST : Array[0..2] of String[6] = ('No', 'Yes', 'Always');
Var Var
A, FBaseFile : TBufFile;
B : LongInt; FBase : RecFileBase;
Procedure EditFileBase;
Var
Box : TAnsiMenuBox;
Form : TAnsiMenuForm;
Topic : String;
Count : Byte;
Begin Begin
Session.SystemLog ('*FBASE EDITOR*'); Topic := '|03(|09File Base Edit|03) |01-|09> |15';
Reset(Session.FileBase.FBaseFile); Box := TAnsiMenuBox.Create;
Form := TAnsiMenuForm.Create;
Box.Open (6, 5, 75, 21);
VerticalLine (22, 7, 19);
VerticalLine (69, 7, 9);
Form.AddStr ('N', ' Base Name' , 11, 7, 24, 7, 11, 30, 40, @FBase.Name, Topic + 'File base name');
Form.AddStr ('F', ' FTP Name' , 12, 8, 24, 8, 10, 30, 60, @FBase.FTPName, Topic + 'Base name in FTP directory list');
Form.AddStr ('D', ' Display File' , 8, 9, 24, 9, 14, 20, 20, @FBase.DispFile, Topic + 'Display file shown before listing');
Form.AddStr ('T', ' Template' , 12, 10, 24, 10, 10, 20, 20, @FBase.Template, Topic + 'Lightbar list template');
Form.AddStr ('L', ' List ACS ' , 12, 11, 24, 11, 10, 30, 30, @FBase.ListACS, Topic + 'ACS to list files');
Form.AddStr ('U', ' Upload ACS ' , 10, 12, 24, 12, 12, 30, 30, @FBase.ULACS, Topic + 'ACS to upload files');
Form.AddStr ('D', ' Download ACS ', 8, 13, 24, 13, 14, 30, 30, @FBase.DLACS, Topic + 'ACS to download files');
Form.AddStr ('C', ' Comment ACS ' , 9, 14, 24, 14, 13, 30, 30, @FBase.CommentACS, Topic + 'ACS to comment and rate files');
Form.AddStr ('P', ' FTP ACS' , 13, 15, 24, 15, 9, 30, 30, @FBase.FTPACS, Topic + 'ACS to access via FTP');
Form.AddStr ('S', ' Sysop ACS ' , 11, 16, 24, 16, 11, 30, 30, @FBase.SysopACS, Topic + 'ACS for Sysop access');
Form.AddTog ('E', ' Default Scan' , 8, 17, 24, 17, 14, 6, 0, 2, 'No Yes Forced', @FBase.DefScan, Topic + 'Default scan setting');
Form.AddPass ('A', ' Password' , 12, 18, 24, 18, 10, 20, 20, @FBase.Password, Topic + 'Base password (Blank/Disable)');
Form.AddPath ('I', ' File Path' , 11, 19, 24, 19, 11, 30, 120, @FBase.Path, Topic + 'Directory where files are stored');
Form.AddBits ('R', ' Free Files' , 57, 7, 71, 7, 12, FBFreeFiles, @FBase.Flags, Topic + 'Files in base are free?');
Form.AddBits ('M', ' Slow Media' , 57, 8, 71, 8, 12, FBSlowMedia, @FBase.Flags, Topic + 'Files stored on slow media device?');
Form.AddBits (#01, ' Uploader' , 59, 9, 71, 9, 10, FBShowUpload, @FBase.Flags, Topic + 'Show upload in listing');
Repeat Repeat
Session.io.AllowPause := True; Case Form.Execute of
#27 : Break;
Session.io.OutFullLn ('|CL|14File Base Editor|CR|CR|09### Name|CR--- |$D40-');
Reset (Session.FileBase.FBaseFile);
While Not Eof(Session.FileBase.FBaseFile) Do Begin
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
Session.io.OutFullLn ('|15' + strPadR(strI2S(FilePos(Session.FileBase.FBaseFile)), 3, ' ') + ' |14|FB');
If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then
Case Session.io.MorePrompt of
'N' : Break;
'C' : Session.io.AllowPause := False;
End;
End;
Session.io.OutFull ('|CR|09(I)nsert, (D)elete, (E)dit, (M)ove, (Q)uit? ');
Case Session.io.OneKey (#13'DEIMQ', True) of
'D' : begin
Session.io.OutRaw ('Delete which base? ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
If (A > 0) and (A <= FileSize(Session.FileBase.FBaseFile)) Then Begin
Seek (Session.FileBase.FBaseFile, A - 1);
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
FileErase (config.datapath + Session.FileBase.FBase.filename + '.dir');
FileErase (config.datapath + Session.FileBase.FBase.filename + '.des');
FileErase (config.datapath + Session.FileBase.FBase.filename + '.scn');
KillRecord (Session.FileBase.FBaseFile, A, SizeOf(FBaseRec));
End;
End;
'I' : begin
Session.io.OutRaw ('Insert before which? (1-' + strI2S(filesize(Session.FileBase.FBaseFile)+1) + '): ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
if (a > 0) and (a <= filesize(Session.FileBase.FBaseFile)+1) then begin
AddRecord (Session.FileBase.FBaseFile, A, SizeOf(Session.FileBase.FBaseFile));
Session.FileBase.FBase.Name := 'New File Base';
Session.FileBase.FBase.FtpName := 'New_File_Base';
Session.FileBase.FBase.Filename := 'NEW';
Session.FileBase.FBase.Dispfile := '';
Session.FileBase.FBase.ListACS := 's255';
Session.FileBase.FBase.FtpACS := 's255';
Session.FileBase.FBase.SysopACS := 's255';
Session.FileBase.FBase.UlACS := 's255';
Session.FileBase.FBase.DlACS := 's255';
Session.FileBase.FBase.Path := '';
Session.FileBase.FBase.Password := '';
Session.FileBase.FBase.ShowUL := True;
Session.FileBase.FBase.IsCDROM := False;
Session.FileBase.FBase.DefScan := 1;
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase);
end;
end;
'E' : begin
Session.io.OutRaw ('Edit which? ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
if (a > 0) and (a <= filesize(Session.FileBase.FBaseFile)) then begin
seek (Session.FileBase.FBaseFile, a-1);
read (Session.FileBase.FBaseFile, Session.FileBase.fbase);
repeat
Session.io.OutFullLn ('|CL|14File Base ' + strI2S(FilePos(Session.FileBase.FBaseFile)) + ' of ' + strI2S(FileSize(Session.FileBase.FBaseFile)) + '|CR|03');
Session.io.OutRawln ('A. Name : ' + Session.FileBase.FBase.name);
Session.io.OutRawln ('B. Filename : ' + Session.FileBase.FBase.filename);
Session.io.OutRawln ('C. Display File : ' + Session.FileBase.FBase.dispfile);
Session.io.OutRawln ('D. List ACS : ' + Session.FileBase.FBase.Listacs);
Session.io.OutRawln ('E. Sysop ACS : ' + Session.FileBase.FBase.SysopACS);
Session.io.OutRawln ('F. Upload ACS : ' + Session.FileBase.FBase.ulacs);
Session.io.OutRawln ('G. Download ACS : ' + Session.FileBase.FBase.dlacs);
Session.io.OutRawln ('H. Storage Path : ' + Session.FileBase.FBase.path);
Session.io.OutRawln ('I. Password : ' + Session.FileBase.FBase.password);
Session.io.OutRawln ('J. Show Uploader : ' + Session.io.OutYN(Session.FileBase.FBase.ShowUL));
Session.io.OutRawLn ('K. Default New Scan : ' + ST[Session.FileBase.FBase.DefScan]);
Session.io.OutRawLn ('L. CD-ROM Area : ' + Session.io.OutYN(Session.FileBase.FBase.IsCDROM));
Session.io.OutRawLn ('M. All Files Free : ' + Session.io.OutYN(Session.FileBase.FBase.IsFREE));
Session.io.OutRawLn ('N. FTP Base Name : ' + Session.FileBase.FBase.FTPName);
Session.io.OutRawLn ('O. FTP List ACS : ' + Session.FileBase.FBase.FTPACS);
Session.io.OutFull ('|CR|09([) Prev, (]) Next, (Q)uit: ');
case Session.io.OneKey('[]ABCDEFGHIJKLMNOQ', True) of
'[' : If FilePos(Session.FileBase.FBaseFile) > 1 Then Begin
Seek (Session.FileBase.FBaseFile, FilePos(Session.FileBase.FBaseFile)-1);
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase);
Seek (Session.FileBase.FBaseFile, FilePos(Session.FileBase.FBaseFile)-2);
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
End;
']' : If FilePos(Session.FileBase.FBaseFile) < FileSize(Session.FileBase.FBaseFile) Then Begin
Seek (Session.FileBase.FBaseFile, FilePos(Session.FileBase.FBaseFile)-1);
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase);
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
End;
'A' : Session.FileBase.FBase.Name := Session.io.InXY(23, 3, 40, 40, 11, Session.FileBase.FBase.Name);
'B' : Session.FileBase.FBase.FileName := Session.io.InXY(23, 4, 40, 40, 11, Session.FileBase.FBase.FileName);
'C' : Session.FileBase.FBase.DispFile := Session.io.InXY(23, 5, 8, 8, 11, Session.FileBase.FBase.DispFile);
'D' : Session.FileBase.FBase.ListACS := Session.io.InXY(23, 6, 20, 20, 11, Session.FileBase.FBase.ListACS);
'E' : Session.FileBase.FBase.SysopACS := Session.io.InXY(23, 7, 20, 20, 11, Session.FileBase.FBase.SysopACS);
'F' : Session.FileBase.FBase.ULacs := Session.io.InXY(23, 8, 20, 20, 11, Session.FileBase.FBase.ULacs);
'G' : Session.FileBase.FBase.DLacs := Session.io.InXY(23, 9, 20, 20, 11, Session.FileBase.FBase.DLacs);
'H' : Session.FileBase.FBase.Path := CheckPath(Session.io.InXY(23, 10, 39, 39, 11, Session.FileBase.FBase.Path));
'I' : Session.FileBase.FBase.Password := Session.io.InXY(23, 11, 15, 15, 12, Session.FileBase.FBase.Password);
'J' : Session.FileBase.FBase.ShowUL := Not Session.FileBase.FBase.ShowUL;
'K' : If Session.FileBase.FBase.DefScan > 1 Then Session.FileBase.FBase.DefScan := 0 Else Inc(Session.FileBase.FBase.DefScan);
'L' : Session.FileBase.FBase.IsCDROM := Not Session.FileBase.FBase.IsCDROM;
'M' : Session.FileBase.FBase.IsFREE := Not Session.FileBase.FBase.IsFREE;
'N' : Session.FileBase.FBase.FtpName := Session.io.InXY(23, 16, 40, 60, 11, Session.FileBase.FBase.FtpName);
'O' : Session.FileBase.FBase.FtpACS := Session.io.InXY(23, 17, 30, 30, 11, Session.FileBase.FBase.FtpACS);
'Q' : Break;
End; End;
Until False; Until False;
Seek (Session.FileBase.FBaseFile, FilePos(Session.FileBase.FBaseFile) - 1);
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase); Box.Close;
End;
Form.Free;
Box.Free;
End;
Procedure Configuration_FileBaseEditor;
Var
Box : TAnsiMenuBox;
List : TAnsiMenuList;
Copied : RecFileBase;
HasCopy : Boolean = False;
Procedure MakeList;
Begin
List.Clear;
FBaseFile.Reset;
While Not FBaseFile.EOF Do Begin
FBaseFile.Read (FBase);
List.Add(strPadR(strI2S(FBaseFile.FilePos), 5, ' ') + ' ' + strStripPipe(FBase.Name), 0);
End; End;
'M' : Begin List.Add('', 2);
Session.io.OutRaw ('Move which? '); End;
A := strS2I(Session.io.GetInput(3, 3, 12, ''));
Session.io.OutRaw ('Move before? (1-' + strI2S(FileSize(Session.FileBase.FBaseFile) + 1) + '): '); Procedure InsertRecord;
B := strS2I(Session.io.GetInput(3, 3, 12, '')); Begin
FBaseFile.RecordInsert (List.Picked);
If (A > 0) and (A <= FileSize(Session.FileBase.FBaseFile)) and (B > 0) and (B <= FileSize(Session.FileBase.FBaseFile) + 1) Then Begin FillChar (FBase, SizeOf(RecFileBase), 0);
Seek (Session.FileBase.FBaseFile, A - 1);
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
AddRecord (Session.FileBase.FBaseFile, B, SizeOf(FBaseRec)); With FBase Do Begin
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase); FileName := 'new';
Path := Config.SystemPath + 'xfers' + PathChar + 'new' + PathChar;
Name := 'New File Base';
FtpName := Name;
DefScan := 1;
SysopACS := 's255';
Flags := FBShowUpload;
End;
If A > B Then Inc(A); FBaseFile.Write(FBase);
End;
KillRecord (Session.FileBase.FBaseFile, A, SizeOf(FBaseRec)); Begin
FBaseFile := TBufFile.Create(4096);
If Not FBaseFile.Open(Config.DataPath + 'fbases.dat', fmOpenCreate, fmReadWrite + fmDenyNone, SizeOf(RecFileBase)) Then Begin
FBaseFile.Free;
Exit;
End;
Box := TAnsiMenuBox.Create;
List := TAnsiMenuList.Create;
List.NoWindow := True;
List.LoChars := #13#27#47;
List.AllowTag := True;
// If FBaseFile.FileSize = 0 Then InsertRecord;
Box.Open (15, 5, 65, 21);
WriteXY (17, 6, 112, '##### File Base Description');
WriteXY (16, 7, 112, strRep(#196, 49));
WriteXY (16, 19, 112, strRep(#196, 49));
WriteXY (29, 20, 112, 'Press / for command list');
Repeat
MakeList;
List.Open (15, 7, 65, 19);
List.Close;
Case List.ExitCode of
'/' : Case GetCommandOption(10, 'I-Insert|D-Delete|C-Copy|P-Paste|') of
'I' : If List.Picked > 1 Then Begin
InsertRecord;
MakeList;
End;
'D' : If (List.Picked < List.ListMax) Then
If ShowMsgBox(1, 'Delete this entry?') Then Begin
FBaseFile.Seek (List.Picked - 1);
FBaseFile.Read (FBase);
FBaseFile.RecordDelete (List.Picked);
If ShowMsgBox(1, 'Delete data files?') Then Begin
FileErase (Config.DataPath + FBase.FileName + '.dir');
FileErase (Config.DataPath + FBase.FileName + '.dat');
FileErase (Config.DataPath + FBase.FileName + '.scn');
End;
MakeList;
End;
'C' : If List.Picked <> List.ListMax Then Begin
FBaseFile.Seek (List.Picked - 1);
FBaseFile.Read (Copied);
HasCopy := True;
End;
'P' : If HasCopy Then Begin
FBaseFile.RecordInsert (List.Picked);
FBaseFile.Write (Copied);
MakeList;
End; End;
End; End;
'Q' : Break; #13 : If List.Picked < List.ListMax Then Begin
FBaseFile.Seek (List.Picked - 1);
FBaseFile.Read (FBase);
EditFileBase;
FBaseFile.Seek (List.Picked - 1);
FBaseFile.Write (FBase);
End;
#27 : Break;
End; End;
Until False; Until False;
Close (Session.FileBase.FBaseFile);
Box.Close;
FBaseFile.Free;
List.Free;
Box.Free;
End; End;
End. End.

View File

@ -40,6 +40,7 @@ Begin
Case Mode of Case Mode of
'A' : Configuration_ArchiveEditor; 'A' : Configuration_ArchiveEditor;
'F' : Configuration_FileBaseEditor;
'P' : Configuration_ProtocolEditor; 'P' : Configuration_ProtocolEditor;
End; End;
@ -122,7 +123,6 @@ Var
'B' : Message_Base_Editor; 'B' : Message_Base_Editor;
'G', 'G',
'R' : Group_Editor; 'R' : Group_Editor;
'F' : File_Base_Editor;
'S' : Levels_Editor; 'S' : Levels_Editor;
'E' : Event_Editor; 'E' : Event_Editor;
'V' : Vote_Editor; 'V' : Vote_Editor;
@ -278,6 +278,7 @@ Begin
End Else End Else
Case Res of Case Res of
'A' : Configuration_ArchiveEditor; 'A' : Configuration_ArchiveEditor;
'F' : Configuration_FileBaseEditor;
'P' : Configuration_ProtocolEditor; 'P' : Configuration_ProtocolEditor;
'U', 'U',
'M', 'M',
@ -285,7 +286,6 @@ Begin
'B', 'B',
'G', 'G',
'R', 'R',
'F',
'S', 'S',
'E', 'E',
'V' : ExecuteOldConfiguration(Res); 'V' : ExecuteOldConfiguration(Res);

View File

@ -23,13 +23,13 @@ Type
End; End;
TFileBase = Class TFileBase = Class
FBaseFile : File of FBaseRec; FBaseFile : File of RecFileBase;
FDirFile : File of RecFileList; FDirFile : File of RecFileList;
FScanFile : File of FScanRec; FScanFile : File of FScanRec;
ProtocolFile : File of RecProtocol; ProtocolFile : File of RecProtocol;
FGroupFile : File of RecGroup; FGroupFile : File of RecGroup;
ArcFile : File of RecArchive; ArcFile : File of RecArchive;
FBase : FBaseRec; FBase : RecFileBase;
FGroup : RecGroup; FGroup : RecGroup;
FScan : FScanRec; FScan : FScanRec;
FDir : RecFileList; FDir : RecFileList;
@ -355,7 +355,7 @@ End;
Procedure TFileBase.SetFileScanDate; Procedure TFileBase.SetFileScanDate;
Var Var
L : LongInt; L : LongInt;
Old : FBaseRec; Old : RecFileBase;
Str : String; Str : String;
Begin Begin
Session.io.OutFull (Session.GetPrompt(255)); Session.io.OutFull (Session.GetPrompt(255));
@ -662,7 +662,7 @@ Begin
If (FDir.Flags And FDirInvalid <> 0) And Not Session.User.Access(Config.AcsDLUnvalid) Then Exit; If (FDir.Flags And FDirInvalid <> 0) And Not Session.User.Access(Config.AcsDLUnvalid) Then Exit;
If (FDir.Flags And FDirFailed <> 0) And Not Session.User.Access(Config.AcsDLFailed) Then Exit; If (FDir.Flags And FDirFailed <> 0) And Not Session.User.Access(Config.AcsDLFailed) Then Exit;
If (FDir.Flags And FDirFree <> 0) or (Session.User.ThisUser.Flags and UserNoRatio <> 0) or (FBase.IsFREE) Then Begin If (FDir.Flags And FDirFree <> 0) or (Session.User.ThisUser.Flags and UserNoRatio <> 0) or (FBase.Flags and FBFreeFiles <> 0) Then Begin
Result := 0; Result := 0;
Exit; Exit;
End; End;
@ -836,7 +836,7 @@ Var
End; End;
Var Var
Old : FBaseRec; Old : RecFileBase;
Temp : String[11]; Temp : String[11];
A : Word; A : Word;
N1 : Word; N1 : Word;
@ -1042,7 +1042,7 @@ End;
Procedure TFileBase.ViewFile; Procedure TFileBase.ViewFile;
Var Var
FName : String[70]; FName : String[70];
Old : FBaseRec; Old : RecFileBase;
Begin Begin
Session.io.OutFull (Session.GetPrompt(353)); Session.io.OutFull (Session.GetPrompt(353));
@ -1121,7 +1121,7 @@ Procedure TFileBase.BatchAdd;
Var Var
FName : String[70]; FName : String[70];
A : Byte; A : Byte;
Old : FBaseRec; Old : RecFileBase;
OkSave : Boolean; OkSave : Boolean;
Begin Begin
If BatchNum = mysMaxBatchQueue Then Begin If BatchNum = mysMaxBatchQueue Then Begin
@ -1223,7 +1223,7 @@ Var
A : Word; A : Word;
Total : Word; Total : Word;
tGroup : recGroup; tGroup : recGroup;
tFBase : FBaseRec; tFBase : RecFileBase;
tLast : Word; tLast : Word;
Areas : Word; Areas : Word;
Data : Word; Data : Word;
@ -1431,7 +1431,7 @@ Procedure TFileBase.ChangeFileArea (Data: String);
Var Var
A : Word; A : Word;
Total : Word; Total : Word;
Old : FBaseRec; Old : RecFileBase;
Str : String[5]; Str : String[5];
Compress : Boolean; Compress : Boolean;
@ -1730,7 +1730,7 @@ Var
TopDesc := 0; TopDesc := 0;
End Else Begin End Else Begin
Inc (Count, FDir.DescLines + 1); Inc (Count, FDir.DescLines + 1);
If FBase.ShowUL Then Inc(Count); If FBase.Flags And FBShowUpload <> 0 Then Inc(Count);
End; End;
End; End;
@ -1772,7 +1772,7 @@ Var
Session.io.ScreenInfo[5].Y := 0; Session.io.ScreenInfo[5].Y := 0;
Session.io.ScreenInfo[6].Y := 0; Session.io.ScreenInfo[6].Y := 0;
Session.io.OutFile ('ansiflst', True, 0); Session.io.OutFile (FBase.Template, True, 0);
PageSize := Session.io.ScreenInfo[2].Y - Session.io.ScreenInfo[1].Y + 1; PageSize := Session.io.ScreenInfo[2].Y - Session.io.ScreenInfo[1].Y + 1;
@ -1925,7 +1925,7 @@ Var
End; End;
If BotDesc > FDir.DescLines Then Begin If BotDesc > FDir.DescLines Then Begin
If FBase.ShowUL Then Begin If FBase.Flags and FBShowUpload <> 0 Then Begin
OK := ShowText(strUploader); OK := ShowText(strUploader);
If OK Then If OK Then
BotDesc := 0 BotDesc := 0
@ -2383,7 +2383,7 @@ End;
Function TFileBase.IsDupeFile (FileName : String; Global : Boolean) : Boolean; Function TFileBase.IsDupeFile (FileName : String; Global : Boolean) : Boolean;
Var Var
Res : Boolean; Res : Boolean;
OLD : FBaseRec; OLD : RecFileBase;
Procedure Check_Area; Procedure Check_Area;
Var Var
@ -2462,7 +2462,7 @@ Var
D : DirStr; D : DirStr;
N : NameStr; N : NameStr;
E : ExtStr; E : ExtStr;
OLD : FBaseRec; OLD : RecFileBase;
Blind : Boolean; Blind : Boolean;
Temp : String; Temp : String;
FullName : String; FullName : String;
@ -2502,7 +2502,7 @@ Begin
Exit; Exit;
End; End;
If FBase.IsCDROM Then Begin If FBase.Flags And FBSlowMedia <> 0 Then Begin
Session.io.OutFullLn (Session.GetPrompt(80)); Session.io.OutFullLn (Session.GetPrompt(80));
FBase := OLD; FBase := OLD;
Exit; Exit;
@ -2715,7 +2715,7 @@ Var
Begin Begin
Copied := False; Copied := False;
If FBase.IsCDROM Then Begin If FBase.Flags And FBSlowMedia <> 0 Then Begin
Copied := True; Copied := True;
@ -2829,7 +2829,7 @@ Var
K : LongInt; K : LongInt;
M : Integer; M : Integer;
Dir : String[40]; Dir : String[40];
Old : FBaseRec; Old : RecFileBase;
FL : Text; FL : Text;
Begin Begin
K := 0; K := 0;
@ -2943,7 +2943,7 @@ Var
End; End;
Var Var
Old : FBaseRec; Old : RecFileBase;
Begin Begin
Old := FBase; Old := FBase;
Found := False; Found := False;
@ -2992,7 +2992,7 @@ End;
Procedure TFileBase.NewFileScan (Mode: Char); Procedure TFileBase.NewFileScan (Mode: Char);
Var Var
TempFBase : FBaseRec; TempFBase : RecFileBase;
Found : Boolean; Found : Boolean;
Done : Boolean; Done : Boolean;
NewFiles : Boolean; NewFiles : Boolean;
@ -3113,7 +3113,7 @@ Var
A : Integer; A : Integer;
B : Integer; B : Integer;
Temp : String; Temp : String;
Old : FBaseRec; Old : RecFileBase;
TF : Text; TF : Text;
Begin Begin
If FBase.FileName = '' Then Begin If FBase.FileName = '' Then Begin
@ -3206,7 +3206,8 @@ Begin
Case Session.io.OneKey('123456[]DEIMQUV!', True) of Case Session.io.OneKey('123456[]DEIMQUV!', True) of
'1' : Begin '1' : Begin
Temp := Session.io.InXY (4, 3, 70, 70, 11, FDir.FileName); Temp := Session.io.InXY (4, 3, 70, 70, 11, FDir.FileName);
If Not FBase.IsCDROM Then
If FBase.Flags And FBSlowMedia = 0 Then
If (Temp <> FDir.FileName) and (Temp <> '') Then Begin If (Temp <> FDir.FileName) and (Temp <> '') Then Begin
If Not FileExist(FBase.Path + Temp) or (strUpper(Temp) = strUpper(FDir.FileName)) Then Begin If Not FileExist(FBase.Path + Temp) or (strUpper(Temp) = strUpper(FDir.FileName)) Then Begin
Assign(TF, FBase.Path + FDir.FileName); Assign(TF, FBase.Path + FDir.FileName);
@ -3518,7 +3519,7 @@ Var
End; End;
Var Var
Old : FBaseRec; Old : RecFileBase;
Pos : LongInt; Pos : LongInt;
Begin Begin
Session.SystemLog ('Mass upload'); Session.SystemLog ('Mass upload');

View File

@ -317,7 +317,7 @@ Begin
End; End;
'A' : Configuration_ExecuteEditor('A'); 'A' : Configuration_ExecuteEditor('A');
'E' : Event_Editor; 'E' : Event_Editor;
'F' : File_Base_Editor; 'F' : Configuration_ExecuteEditor('F');
'G' : Group_Editor; 'G' : Group_Editor;
'L' : Levels_Editor; 'L' : Levels_Editor;
'M' : Message_Base_Editor; 'M' : Message_Base_Editor;

View File

@ -769,13 +769,13 @@ End;
Procedure TMsgBase.ReplyMessage (Email: Boolean; ListMode : Byte; ReplyID : String); Procedure TMsgBase.ReplyMessage (Email: Boolean; ListMode : Byte; ReplyID : String);
Var Var
ToWho : String[30]; {to field} ToWho : String[30];
Subj : String[60]; {subject field} Subj : String[60];
Addr : RecEchomailAddr; {netmail to addr} Addr : RecEchomailAddr;
MsgNew : PMsgBaseABS; MsgNew : PMsgBaseABS;
Temp1 : String; {quote text} Temp1 : String;
Temp2 : String[2]; {Initials} Temp2 : String[2];
Temp3 : String[80]; {Text} Temp3 : String[80];
tFile : Text; tFile : Text;
Lines : SmallInt; Lines : SmallInt;
Begin Begin
@ -1019,10 +1019,10 @@ End;
Procedure TMsgBase.MessageUpload (Var CurLine: SmallInt); Procedure TMsgBase.MessageUpload (Var CurLine: SmallInt);
Var Var
FN : String[100]; {was string} FN : String[100];
TF : Text; TF : Text;
T1 : String[30]; { Saved TO: } T1 : String[30];
T2 : String[60]; { Saved SUBJ: } T2 : String[60];
OK : Boolean; OK : Boolean;
Begin Begin
OK := False; OK := False;
@ -1500,6 +1500,7 @@ Var
'D' : Begin 'D' : Begin
If Session.io.GetYN(Session.GetPrompt(402), True) Then Begin If Session.io.GetYN(Session.GetPrompt(402), True) Then Begin
MsgBase^.DeleteMsg; MsgBase^.DeleteMsg;
If Not SeekNextMsg(False, False) Then Begin If Not SeekNextMsg(False, False) Then Begin
Ansi_View_Message := True; Ansi_View_Message := True;
Exit; Exit;
@ -1529,7 +1530,9 @@ Var
Session.io.PromptInfo[2] := strI2S(MsgBase^.GetHighMsgNum); Session.io.PromptInfo[2] := strI2S(MsgBase^.GetHighMsgNum);
Session.io.OutFull (Session.GetPrompt(403)); Session.io.OutFull (Session.GetPrompt(403));
A := strS2I(Session.io.GetInput(9, 9, 12, '')); A := strS2I(Session.io.GetInput(9, 9, 12, ''));
If (A > 0) and (A <= MsgBase^.GetHighMsgNum) Then Begin If (A > 0) and (A <= MsgBase^.GetHighMsgNum) Then Begin
MsgBase^.SeekFirst(A); MsgBase^.SeekFirst(A);
If Not SeekNextMsg(True, False) Then Begin If Not SeekNextMsg(True, False) Then Begin
@ -1546,6 +1549,7 @@ Var
Ansi_View_Message := True; Ansi_View_Message := True;
Exit; Exit;
End; End;
Break; Break;
End; End;
#13 : If (Lines > PageSize) and (PageEnd <= Lines) Then Begin #13 : If (Lines > PageSize) and (PageEnd <= Lines) Then Begin
@ -1578,21 +1582,26 @@ Var
#27, #27,
'Q' : Begin 'Q' : Begin
GetMessageScan; GetMessageScan;
If MScan.NewScan = 2 Then If MScan.NewScan = 2 Then
Session.io.OutFullLn(Session.GetPrompt(406)) Session.io.OutFullLn(Session.GetPrompt(406))
Else Begin Else Begin
ReadRes := False; ReadRes := False;
Ansi_View_Message := True; Ansi_View_Message := True;
Exit; Exit;
End; End;
End; End;
'R' : Begin 'R' : Begin
ReplyMessage (Mode = 'E', ListMode, ReplyID); ReplyMessage (Mode = 'E', ListMode, ReplyID);
Break; Break;
End; End;
'T' : Begin 'T' : Begin
Session.io.PromptInfo[1] := MBase.Name; Session.io.PromptInfo[1] := MBase.Name;
GetMessageScan; GetMessageScan;
Case MScan.NewScan of Case MScan.NewScan of
0 : Begin 0 : Begin
MScan.NewScan := 1; MScan.NewScan := 1;
@ -1606,20 +1615,24 @@ Var
End; End;
SetMessageScan; SetMessageScan;
Break; Break;
End; End;
'X' : Begin 'X' : Begin
Export_Message; Export_Message;
Break; Break;
End; End;
'[' : If MsgBase^.GetRefer > 0 Then Begin '[' : If MsgBase^.GetRefer > 0 Then Begin
MsgBase^.SeekFirst(MsgBase^.GetRefer); MsgBase^.SeekFirst(MsgBase^.GetRefer);
MsgBase^.MsgStartUp; MsgBase^.MsgStartUp;
Break; Break;
End; End;
']' : If MsgBase^.GetSeeAlso > 0 Then Begin ']' : If MsgBase^.GetSeeAlso > 0 Then Begin
MsgBase^.SeekFirst(MsgBase^.GetSeeAlso); MsgBase^.SeekFirst(MsgBase^.GetSeeAlso);
MsgBase^.MsgStartUp; MsgBase^.MsgStartUp;
Break; Break;
End; End;
'?' : Begin '?' : Begin
@ -1671,6 +1684,7 @@ Var
Session.io.PromptInfo[2] := Subj; Session.io.PromptInfo[2] := Subj;
Session.io.PromptInfo[3] := MsgFrom; Session.io.PromptInfo[3] := MsgFrom;
Session.io.PromptInfo[4] := MsgTo; Session.io.PromptInfo[4] := MsgTo;
If NewMsgs Then If NewMsgs Then
Session.io.PromptInfo[5] := Session.Lang.NewMsgChar Session.io.PromptInfo[5] := Session.Lang.NewMsgChar
Else Else
@ -1711,17 +1725,16 @@ Var
CurPage := 0; CurPage := 0;
End; End;
{ add scanning prompt here } // add scanning prompt here
(* //if (scanmode=3) then begin
if (scanmode=3) then begin // Session.io.AnsiGotoXY(32, 11);
Session.io.AnsiGotoXY(32, 11); // Session.io.OutFull ('|08.---------------.');
Session.io.OutFull ('|08.---------------.'); // Session.io.AnsiGotoXY(32, 12);
Session.io.AnsiGotoXY(32, 12); // Session.io.OutFull ('| |07searching ... |08|');
Session.io.OutFull ('| |07searching ... |08|'); // Session.io.AnsiGotoXY(32, 13);
Session.io.AnsiGotoXY(32, 13); // Session.io.OutFull ('`---------------''');
Session.io.OutFull ('`---------------'''); //end;
end;
*)
PageTotal := 0; PageTotal := 0;
Read_Page := True; Read_Page := True;

View File

@ -69,17 +69,19 @@ Begin
If Session.io.ScreenInfo[9].X <> 0 Then Begin If Session.io.ScreenInfo[9].X <> 0 Then Begin
Session.io.AnsiGotoXY (Session.io.ScreenInfo[9].X, Session.io.ScreenInfo[9].Y); Session.io.AnsiGotoXY (Session.io.ScreenInfo[9].X, Session.io.ScreenInfo[9].Y);
Session.io.AnsiColor (Session.io.ScreenInfo[9].A); Session.io.AnsiColor (Session.io.ScreenInfo[9].A);
Session.io.OutFull ('|$L04|TL'); Session.io.OutFull ('|$L04|TL');
End; End;
If Session.io.ScreenInfo[0].X <> 0 Then Begin If Session.io.ScreenInfo[0].X <> 0 Then Begin
Session.io.AnsiGotoXY (Session.io.ScreenInfo[0].X, Session.io.ScreenInfo[0].Y); Session.io.AnsiGotoXY (Session.io.ScreenInfo[0].X, Session.io.ScreenInfo[0].Y);
Session.io.AnsiColor (Session.io.ScreenInfo[0].A); Session.io.AnsiColor (Session.io.ScreenInfo[0].A);
Session.io.OutFull ('|TI'); Session.io.OutFull ('|TI');
End; End;
Session.io.AnsiGotoXY (X, Y); Session.io.AnsiGotoXY (X, Y);
Session.io.AnsiColor(A); Session.io.AnsiColor (A);
Update := TimerMinutes; Update := TimerMinutes;
End; End;
@ -89,11 +91,13 @@ Begin
If Not Session.io.LocalInput and Not LastUser Then Begin If Not Session.io.LocalInput and Not LastUser Then Begin
Session.io.AnsiGotoXY (UserX, UserY); Session.io.AnsiGotoXY (UserX, UserY);
Session.io.AnsiColor (Session.io.ScreenInfo[1].A); Session.io.AnsiColor (Session.io.ScreenInfo[1].A);
LastUser := True; LastUser := True;
End Else End Else
If Session.io.LocalInput and LastUser Then Begin If Session.io.LocalInput and LastUser Then Begin
Session.io.AnsiGotoXY (SysopX, SysopY); Session.io.AnsiGotoXY (SysopX, SysopY);
Session.io.AnsiColor (Session.io.ScreenInfo[5].A); Session.io.AnsiColor (Session.io.ScreenInfo[5].A);
LastUser := False; LastUser := False;
End; End;
@ -103,12 +107,14 @@ Begin
#08 : If Session.io.LocalInput Then Begin #08 : If Session.io.LocalInput Then Begin
If SysopX > Session.io.ScreenInfo[7].X Then Begin If SysopX > Session.io.ScreenInfo[7].X Then Begin
Session.io.OutBS (1, True); Session.io.OutBS (1, True);
Dec (SysopX); Dec (SysopX);
Dec (SysopStr[0]); Dec (SysopStr[0]);
End; End;
End Else Begin End Else Begin
If UserX > Session.io.ScreenInfo[3].X Then Begin If UserX > Session.io.ScreenInfo[3].X Then Begin
Session.io.OutBS (1, True); Session.io.OutBS (1, True);
Dec (UserX); Dec (UserX);
Dec (UserStr[0]); Dec (UserStr[0]);
End; End;
@ -259,6 +265,7 @@ Begin
If Config.ChatLogging Then Begin If Config.ChatLogging Then Begin
Assign (tFile, Config.LogsPath + 'chat.log'); Assign (tFile, Config.LogsPath + 'chat.log');
{$I-} Append (tFile); {$I+} {$I-} Append (tFile); {$I+}
If IoResult <> 0 Then ReWrite (tFile); If IoResult <> 0 Then ReWrite (tFile);
WriteLn (tFile, ''); WriteLn (tFile, '');

View File

@ -109,6 +109,7 @@ Var
Str : String; Str : String;
Begin Begin
ResetSession; ResetSession;
Client.WriteLine(re_Greeting); Client.WriteLine(re_Greeting);
Repeat Repeat

View File

@ -90,7 +90,7 @@ Type
Function GetMBaseRecord (Num: LongInt) : Boolean; Function GetMBaseRecord (Num: LongInt) : Boolean;
Procedure GetMGroupVars (Var G: RecGroup); Procedure GetMGroupVars (Var G: RecGroup);
Function GetMGroupRecord (Num: LongInt) : Boolean; Function GetMGroupRecord (Num: LongInt) : Boolean;
Procedure GetFBaseVars (Var F: FBaseRec); Procedure GetFBaseVars (Var F: RecFileBase);
Function GetFBaseRecord (Num: LongInt) : Boolean; Function GetFBaseRecord (Num: LongInt) : Boolean;
Procedure GetFGroupVars (Var G: RecGroup); Procedure GetFGroupVars (Var G: RecGroup);
Function GetFGroupRecord (Num: LongInt) : Boolean; Function GetFGroupRecord (Num: LongInt) : Boolean;
@ -203,7 +203,7 @@ Begin
Close (F); Close (F);
End; End;
Procedure TInterpEngine.GetFBaseVars (Var F: FBaseRec); Procedure TInterpEngine.GetFBaseVars (Var F: RecFileBase);
Begin Begin
Move (F.Name, VarData[IdxVarFBase ]^.Data^, SizeOf(F.Name)); Move (F.Name, VarData[IdxVarFBase ]^.Data^, SizeOf(F.Name));
Move (F.ListACS, VarData[IdxVarFBase + 1 ]^.Data^, SizeOf(F.ListACS)); Move (F.ListACS, VarData[IdxVarFBase + 1 ]^.Data^, SizeOf(F.ListACS));
@ -212,12 +212,12 @@ End;
Function TInterpEngine.GetFBaseRecord (Num: LongInt) : Boolean; Function TInterpEngine.GetFBaseRecord (Num: LongInt) : Boolean;
Var Var
F : File; F : File;
FB : FBaseRec; FB : RecFileBase;
Begin Begin
Result := False; Result := False;
Assign (F, Config.DataPath + 'fbases.dat'); Assign (F, Config.DataPath + 'fbases.dat');
If Not ioReset(F, SizeOf(FBaseRec), fmRWDN) Then Exit; If Not ioReset(F, SizeOf(RecFileBase), fmRWDN) Then Exit;
If ioSeek(F, Pred(Num)) And (ioRead(F, FB)) Then Begin If ioSeek(F, Pred(Num)) And (ioRead(F, FB)) Then Begin
GetFBaseVars(FB); GetFBaseVars(FB);

View File

@ -344,6 +344,7 @@ Begin
{$I-} Reset (Session.User.SecurityFile); {$I+} {$I-} Reset (Session.User.SecurityFile); {$I+}
If IoResult <> 0 Then Begin If IoResult <> 0 Then Begin
ReWrite(Session.User.SecurityFile); ReWrite(Session.User.SecurityFile);
For Count := 1 to 255 Do For Count := 1 to 255 Do
Write (Session.User.SecurityFile, Session.User.Security); Write (Session.User.SecurityFile, Session.User.Security);
End; End;

View File

@ -244,17 +244,15 @@ Type
End; End;
Const Const
UserLockedOut = $01; UserLockedOut = $00000001;
UserNoRatio = $02; UserNoRatio = $00000002;
UserDeleted = $04; UserDeleted = $00000004;
UserNoKill = $08; UserNoKill = $00000008;
UserNoCaller = $10; UserNoCaller = $00000010;
UserNoPWChange = $20; UserNoPWChange = $00000020;
//FUTURE DATA FILE UPDATES NEEDED //FUTURE DATA FILE UPDATES NEEDED
//LASTON needs optional1-10 compare to Mystic2 //LASTON needs optional1-10 compare to Mystic2
//FBASE
// ACS to comment on file
//MBASES //MBASES
// expand header filename[20] // expand header filename[20]
// add template[20] // add template[20]
@ -282,13 +280,11 @@ Const
// compare to mystic 2 for fallback stuff? // compare to mystic 2 for fallback stuff?
// rename to THEME // rename to THEME
// horizontal/vertical percent bars // horizontal/vertical percent bars
// default prot into users
// default prot into new user options
Type Type
RecUser = Record { USERS.DAT } RecUser = Record { USERS.DAT }
PermIdx : LongInt; // permanent user number PermIdx : LongInt; // permanent user number
Flags : Byte; { User Flags } Flags : LongInt; { User Flags }
Handle : String[30]; { Handle } Handle : String[30]; { Handle }
RealName : String[30]; { Real Name } RealName : String[30]; { Real Name }
Password : String[15]; { Password } Password : String[15]; { Password }
@ -351,7 +347,7 @@ Type
UseFullChat : Boolean; { use full screen teleconference } UseFullChat : Boolean; { use full screen teleconference }
Credits : LongInt; Credits : LongInt;
Protocol : Char; Protocol : Char;
Reserved : Array[1..392] of Byte; Reserved : Array[1..389] of Byte;
End; End;
EventRec = Record { EVENTS.DAT } EventRec = Record { EVENTS.DAT }
@ -445,25 +441,29 @@ Type
LastNew : LongInt; { Last file scan (packed datetime)} LastNew : LongInt; { Last file scan (packed datetime)}
End; End;
FBaseRec = Record { FBASES.DAT } Const
Name : String[40]; { File base name } FBShowUpload = $00000001;
FtpName : String[60]; { FTP directory name } FBSlowMedia = $00000002;
Filename : String[40]; { File name } FBFreeFiles = $00000004;
DispFile : String[20]; { Pre-list display file name }
Template : String[20]; { ansi file list template } Type
ListACS, { ACS required to see this base } RecFileBase = Record
FtpACS, { ACS to see in FTP directory } Name : String[40];
SysopACS, { ACS required for SysOp functions} FtpName : String[60];
ULACS, { ACS required to upload files } FileName : String[40];
DLACS : String[mysMaxAcsSize]; { ACS required to download files } DispFile : String[20];
Path : String[120]; { Path where files are stored } Template : String[20];
Password : String[20]; { Password to access this base } ListACS : String[30];
DefScan : Byte; { Default New Scan Setting } FtpACS : String[30];
ShowUL : Boolean; DLACS : String[30];
IsCDROM : Boolean; ULACS : String[30];
IsFREE : Boolean; CommentACS : String[30];
SysOpACS : String[30];
Path : String[120];
Password : String[20];
DefScan : Byte;
Flags : LongInt;
End; End;
// make flags and merge in shouul, iscdrom,isfree, etc
(* The file directory listing are stored as <FBaseRec.FileName>.DIR in *) (* The file directory listing are stored as <FBaseRec.FileName>.DIR in *)
(* the data directory. Each record stores the info on one file. File *) (* the data directory. Each record stores the info on one file. File *)