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}
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 }
FileName : String[70]; { File name }
Size : LongInt; { File size (in bytes) }
@ -1021,21 +1040,74 @@ Begin
FindClose(DirInfo);
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
ConfigFile : File of RecConfig;
Begin
WarningDisplay;
//COMMENT this out if mystic.dat is being converted:
// Assign (ConfigFile, 'mystic.dat');
// Reset (ConfigFile);
// Read (ConfigFile, Config);
// Close (ConfigFile);
Assign (ConfigFile, 'mystic.dat');
Reset (ConfigFile);
Read (ConfigFile, Config);
Close (ConfigFile);
ConvertConfig; //1.10a11
// ConvertConfig; //1.10a11
// ConvertUsers; //1.10a11
//ConvertSecurity; //1.10a11
//ConvertFileLists; //1.10a11
ConvertFileBases; //1.10a11
// ConvertArchives; //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
half-assed implementation though, since doing it "the right way" will
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;
WriteXY (X1 + Width + 1, Y1 + 1 + A, Box.BoxAttr2, #178);
End;
Session.io.BufFlush;
End;
Procedure TAnsiMenuList.Open (BX1, BY1, BX2, BY2 : Byte);
@ -515,6 +517,7 @@ Begin
End;
If Picked < ListMax Then Inc (Picked);
If Picked > TopPage + WinSize - 1 Then Inc (TopPage);
Update;
End Else
If Pos(Ch, LoChars) > 0 Then Begin
ExitCode := Ch;

View File

@ -4,164 +4,191 @@ Unit bbs_cfg_FileBase;
Interface
Procedure File_Base_Editor;
Procedure Configuration_FileBaseEditor;
Implementation
Uses
m_FileIO,
m_Strings,
m_FileIO,
bbs_Ansi_MenuBox,
bbs_Ansi_MenuForm,
bbs_Common,
bbs_Core,
bbs_User;
bbs_cfg_Common;
Procedure File_Base_Editor;
Const
ST : Array[0..2] of String[6] = ('No', 'Yes', 'Always');
Var
A,
B : LongInt;
FBaseFile : TBufFile;
FBase : RecFileBase;
Procedure EditFileBase;
Var
Box : TAnsiMenuBox;
Form : TAnsiMenuForm;
Topic : String;
Count : Byte;
Begin
Session.SystemLog ('*FBASE EDITOR*');
Reset(Session.FileBase.FBaseFile);
Topic := '|03(|09File Base Edit|03) |01-|09> |15';
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
Session.io.AllowPause := True;
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;
Case Form.Execute of
#27 : Break;
End;
Until False;
Seek (Session.FileBase.FBaseFile, FilePos(Session.FileBase.FBaseFile) - 1);
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase);
End;
Box.Close;
Form.Free;
Box.Free;
End;
'M' : Begin
Session.io.OutRaw ('Move which? ');
A := strS2I(Session.io.GetInput(3, 3, 12, ''));
Procedure Configuration_FileBaseEditor;
Var
Box : TAnsiMenuBox;
List : TAnsiMenuList;
Copied : RecFileBase;
HasCopy : Boolean = False;
Session.io.OutRaw ('Move before? (1-' + strI2S(FileSize(Session.FileBase.FBaseFile) + 1) + '): ');
B := strS2I(Session.io.GetInput(3, 3, 12, ''));
Procedure MakeList;
Begin
List.Clear;
If (A > 0) and (A <= FileSize(Session.FileBase.FBaseFile)) and (B > 0) and (B <= FileSize(Session.FileBase.FBaseFile) + 1) Then Begin
Seek (Session.FileBase.FBaseFile, A - 1);
Read (Session.FileBase.FBaseFile, Session.FileBase.FBase);
FBaseFile.Reset;
AddRecord (Session.FileBase.FBaseFile, B, SizeOf(FBaseRec));
Write (Session.FileBase.FBaseFile, Session.FileBase.FBase);
While Not FBaseFile.EOF Do Begin
FBaseFile.Read (FBase);
If A > B Then Inc(A);
List.Add(strPadR(strI2S(FBaseFile.FilePos), 5, ' ') + ' ' + strStripPipe(FBase.Name), 0);
End;
KillRecord (Session.FileBase.FBaseFile, A, SizeOf(FBaseRec));
List.Add('', 2);
End;
Procedure InsertRecord;
Begin
FBaseFile.RecordInsert (List.Picked);
FillChar (FBase, SizeOf(RecFileBase), 0);
With FBase Do Begin
FileName := 'new';
Path := Config.SystemPath + 'xfers' + PathChar + 'new' + PathChar;
Name := 'New File Base';
FtpName := Name;
DefScan := 1;
SysopACS := 's255';
Flags := FBShowUpload;
End;
FBaseFile.Write(FBase);
End;
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;
'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;
Until False;
Close (Session.FileBase.FBaseFile);
Box.Close;
FBaseFile.Free;
List.Free;
Box.Free;
End;
End.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -90,7 +90,7 @@ Type
Function GetMBaseRecord (Num: LongInt) : Boolean;
Procedure GetMGroupVars (Var G: RecGroup);
Function GetMGroupRecord (Num: LongInt) : Boolean;
Procedure GetFBaseVars (Var F: FBaseRec);
Procedure GetFBaseVars (Var F: RecFileBase);
Function GetFBaseRecord (Num: LongInt) : Boolean;
Procedure GetFGroupVars (Var G: RecGroup);
Function GetFGroupRecord (Num: LongInt) : Boolean;
@ -203,7 +203,7 @@ Begin
Close (F);
End;
Procedure TInterpEngine.GetFBaseVars (Var F: FBaseRec);
Procedure TInterpEngine.GetFBaseVars (Var F: RecFileBase);
Begin
Move (F.Name, VarData[IdxVarFBase ]^.Data^, SizeOf(F.Name));
Move (F.ListACS, VarData[IdxVarFBase + 1 ]^.Data^, SizeOf(F.ListACS));
@ -212,12 +212,12 @@ End;
Function TInterpEngine.GetFBaseRecord (Num: LongInt) : Boolean;
Var
F : File;
FB : FBaseRec;
FB : RecFileBase;
Begin
Result := False;
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
GetFBaseVars(FB);

View File

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

View File

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