1136 lines
42 KiB
Plaintext
1136 lines
42 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT SysOp8;
|
|
|
|
INTERFACE
|
|
|
|
PROCEDURE MessageAreaEditor;
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
Common,
|
|
File2,
|
|
Mail0,
|
|
SysOp7;
|
|
|
|
PROCEDURE MessageAreaEditor;
|
|
CONST
|
|
DisplayType: Byte = 1;
|
|
VAR
|
|
MsgareaDefFile: FILE OF MessageAreaRecordType;
|
|
TempMemMsgArea: MessageAreaRecordType;
|
|
Cmd: Char;
|
|
RecNumToList: SmallInt;
|
|
Ok,
|
|
Changed,
|
|
SaveTempPause: Boolean;
|
|
|
|
FUNCTION DisplayNetFlags(MAFlags: MAFlagSet; C1,C2: Char): AStr;
|
|
VAR
|
|
MAFlagT: MessageAreaFlagType;
|
|
TempS: AStr;
|
|
BEGIN
|
|
TempS := '';
|
|
FOR MAFlagT := MASKludge TO MAInternet DO
|
|
IF (MAFlagT IN MAFlags) THEN
|
|
TempS := TempS + '^'+C1+Copy('RUAPFQKSOTI',(Ord(MAFlagT) + 1),1)
|
|
ELSE
|
|
TempS := TempS + '^'+C2+'-';
|
|
DisplayNetFlags := TempS;
|
|
END;
|
|
|
|
FUNCTION DisplayMAFlags(MAFlags: MAFlagSet; C1,C2: Char): AStr;
|
|
VAR
|
|
MAFlagT: MessageAreaFlagType;
|
|
TempS: AStr;
|
|
BEGIN
|
|
TempS := '';
|
|
FOR MAFlagT := MARealName TO MAQuote DO
|
|
IF (MAFlagT IN MAFlags) THEN
|
|
TempS := TempS + '^'+C1+Copy('RUAPFQKSOTI',(Ord(MAFlagT) + 1),1)
|
|
ELSE
|
|
TempS := TempS + '^'+C2+'-';
|
|
DisplayMAFlags := TempS;
|
|
END;
|
|
|
|
PROCEDURE ToggleMAFlag(MAFlagT: MessageAreaFlagType; VAR MAFlags: MAFlagSet);
|
|
BEGIN
|
|
IF (MAFlagT IN MAFlags) THEN
|
|
Exclude(MAFlags,MAFlagT)
|
|
ELSE
|
|
Include(MAFlags,MAFlagT);
|
|
END;
|
|
|
|
PROCEDURE ToggleMAFlags(C: Char; VAR MAFlags: MAFlagSet; VAR Changed: Boolean);
|
|
VAR
|
|
TempMAFlags: MAFlagSet;
|
|
BEGIN
|
|
TempMAFlags := MAFlags;
|
|
CASE C OF
|
|
'R' : ToggleMAFlag(MARealName,MAFlags);
|
|
'U' : ToggleMAFlag(MAUnHidden,MAFlags);
|
|
'A' : ToggleMAFlag(MAFilter,MAFlags);
|
|
'P' : ToggleMAFlag(MAPrivate,MAFlags);
|
|
'F' : ToggleMAFlag(MAForceRead,MAFlags);
|
|
'Q' : ToggleMAFlag(MAQuote,MAFlags);
|
|
'K' : ToggleMAFlag(MASKludge,MAFlags);
|
|
'S' : ToggleMAFlag(MASSeenby,MAFlags);
|
|
'O' : ToggleMAFlag(MASOrigin,MAFlags);
|
|
'T' : ToggleMAFlag(MAAddTear,MAFlags);
|
|
'I' : ToggleMAFlag(MAInternet,MAFlags);
|
|
END;
|
|
IF (MAFlags <> TempMAFlags) THEN
|
|
Changed := TRUE;
|
|
END;
|
|
|
|
FUNCTION AnonTypeChar(Anonymous: AnonTyp): Char;
|
|
BEGIN
|
|
CASE Anonymous OF
|
|
ATYes : AnonTypeChar := 'Y';
|
|
ATNo : AnonTypeChar := 'N';
|
|
ATForced : AnonTypeChar := 'F';
|
|
ATDearAbby : AnonTypeChar := 'D';
|
|
ATAnyName : AnonTypeChar := 'A';
|
|
END;
|
|
END;
|
|
|
|
FUNCTION NodeStr(AKA: BYTE): AStr;
|
|
VAR
|
|
TempS: AStr;
|
|
BEGIN
|
|
TempS := IntToStr(General.AKA[AKA].Zone)+':'+
|
|
IntToStr(General.AKA[AKA].Net)+'/'+
|
|
IntToStr(General.AKA[AKA].Node);
|
|
IF (General.AKA[AKA].Point > 0) THEN
|
|
TempS := TempS+'.'+IntToStr(General.AKA[AKA].Point);
|
|
NodeStr := TempS;
|
|
END;
|
|
|
|
FUNCTION MATypeStr(MAType: Integer): AStr;
|
|
BEGIN
|
|
CASE MAType OF
|
|
0 : MATypeStr := 'Local';
|
|
1 : MATypeStr := 'EchoMail';
|
|
2 : MATypeStr := 'GroupMail';
|
|
3 : MATypeStr := 'QwkMail';
|
|
END;
|
|
END;
|
|
|
|
FUNCTION AnonTypeStr(Anonymous: AnonTyp): ASTR;
|
|
BEGIN
|
|
CASE Anonymous OF
|
|
ATYes : AnonTypeStr := 'Yes';
|
|
ATNo : AnonTypeStr := 'No';
|
|
ATForced : AnonTypeStr := 'Forced';
|
|
ATDearAbby : AnonTypeStr := 'Dear Abby';
|
|
ATAnyName : AnonTypeStr := 'Any Name';
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE InitMsgAreaVars(VAR MemMsgArea: MessageAreaRecordType);
|
|
BEGIN
|
|
FillChar(MemMsgArea,SizeOf(MemMsgArea),0);
|
|
WITH MemMsgArea DO
|
|
BEGIN
|
|
Name := '<< New Message Area >>';
|
|
FileName := 'NEWBOARD';
|
|
MsgPath := '';
|
|
ACS := '';
|
|
PostACS := '';
|
|
MCIACS := '';
|
|
SysOpACS := '';
|
|
MaxMsgs := 100;
|
|
Anonymous := ATNo;
|
|
Password := '';
|
|
MAFlags := [];
|
|
MAType := 0;
|
|
Origin := '';
|
|
Text_Color := General.Text_Color;
|
|
Quote_Color := General.Quote_Color;
|
|
Tear_Color := General.Tear_Color;
|
|
Origin_Color := General.Origin_Color;
|
|
MessageReadMenu := 0;
|
|
QuoteStart := '|03Quoting message from |11@F |03to |11@T';
|
|
QuoteEnd := '|03on |11@D|03.';
|
|
PrePostFile := '';
|
|
AKA := 0;
|
|
QWKIndex := 0;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE ChangeMsgAreaDrive(Drive: Char; FirstRecNum: SmallInt);
|
|
VAR
|
|
LastRecNum,
|
|
RecNum: SmallInt;
|
|
BEGIN
|
|
IF (NumMsgAreas = 0) THEN
|
|
Messages(4,0,'message areas')
|
|
ELSE
|
|
BEGIN
|
|
FirstRecNum := -1;
|
|
InputIntegerWOC('%LFMessage area to start at?',FirstRecNum,[NumbersOnly],1,NumMsgAreas);
|
|
IF (FirstRecNum >= 1) AND (FirstRecNum <= NumMsgAreas) THEN
|
|
BEGIN
|
|
LastRecNum := -1;
|
|
InputIntegerWOC('%LFMessage area to end at?',LastRecNum,[NumbersOnly],1,NumMsgAreas);
|
|
IF (LastRecNum >= 1) AND (LastRecNum <= NumMsgAreas) THEN
|
|
BEGIN
|
|
IF (FirstRecNum > LastRecNum) OR (LastRecNum < FirstRecNum) THEN
|
|
Messages(8,0,'')
|
|
ELSE
|
|
BEGIN
|
|
LOneK('%LFChange to which drive? (^5A^4-^5Z^4): ',Drive,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'^M,TRUE,TRUE);
|
|
ChDir(Drive+':');
|
|
IF (IOResult <> 0) THEN
|
|
Messages(7,0,'')
|
|
ELSE
|
|
BEGIN
|
|
ChDir(StartDir);
|
|
Prompt('%LFUpdating the drive for message area '+IntToStr(FirstRecNum)+' to '+IntTostr(LastRecNum)+' ... ');
|
|
Reset(MsgAreaFile);
|
|
FOR RecNum := FirstRecNum TO LastRecNum DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNum - 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
IF (MemMsgArea.MAType IN [1,2]) THEN
|
|
MemMsgArea.MsgPath[1] := Drive;
|
|
Seek(MsgAreaFile,(RecNum - 1));
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
Print('Done');
|
|
SysOpLog('* Changed message areas: ^5'+IntToStr(FirstRecNum)+'^1-^5'+IntToStr(LastRecNum)+'^1 to ^5'+Drive+':\');
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
END
|
|
END;
|
|
|
|
PROCEDURE DeleteMsgArea(TempMemMsgArea1: MessageAreaRecordType; RecNumToDelete: SmallInt);
|
|
VAR
|
|
RecNum: Integer;
|
|
Ok,
|
|
Ok1: Boolean;
|
|
BEGIN
|
|
IF (NumMsgAreas = 0) THEN
|
|
Messages(4,0,'message areas')
|
|
ELSE
|
|
BEGIN
|
|
RecNumToDelete := -1;
|
|
InputIntegerWOC('%LFMessage area to delete?',RecNumToDelete,[NumbersOnly],1,NumMsgAreas);
|
|
IF (RecNumToDelete >= 1) AND (RecNumToDelete <= NumMsgAreas) THEN
|
|
BEGIN
|
|
Reset(MsgAreaFile);
|
|
Seek(MsgAreaFile,(RecNumToDelete - 1));
|
|
Read(MsgAreaFile,TempMemMsgArea1);
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
Print('%LFMessage area: ^5'+TempMemMsgArea1.Name);
|
|
IF PYNQ('%LFAre you sure you want to delete it? ',0,FALSE) THEN
|
|
BEGIN
|
|
Print('%LF[> Deleting message area record ...');
|
|
Dec(RecNumToDelete);
|
|
Reset(MsgAreaFile);
|
|
IF (RecNumToDelete >= 0) AND (RecNumToDelete <= (FileSize(MsgAreaFile) - 2)) THEN
|
|
FOR RecNum := RecNumToDelete TO (FileSize(MsgAreaFile) - 2) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNum + 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
Seek(MsgAreaFile,RecNum);
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
Seek(MsgAreaFile,(FileSize(MsgAreaFile) - 1));
|
|
Truncate(MsgAreaFile);
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
Dec(NumMsgAreas);
|
|
SysOpLog('* Deleted message area: ^5'+TempMemMsgArea1.Name);
|
|
Ok := TRUE;
|
|
Ok1 := TRUE;
|
|
Reset(MsgAreaFile);
|
|
FOR RecNum := 1 TO FileSize(MsgAreaFile) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNum - 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
IF (MemMsgArea.FileName = TempMemMsgArea1.FileName) THEN
|
|
Ok := FALSE;
|
|
IF (TempMemMsgArea1.MAType IN [1,2]) AND (MemMsgArea.MsgPath = TempMemMsgArea1.MsgPath) THEN
|
|
Ok1 := FALSE;
|
|
END;
|
|
Close(MsgAreaFile);
|
|
IF (Ok) THEN
|
|
IF (PYNQ('%LFDelete message area data files also? ',0,FALSE)) THEN
|
|
BEGIN
|
|
Kill(General.MsgPath+MemMsgArea.FileName+'.HDR');
|
|
Kill(General.MsgPath+MemMsgArea.FileName+'.DAT');
|
|
Kill(General.MsgPath+MemMsgArea.FileName+'.SCN');
|
|
END;
|
|
IF (Ok1) AND (TempMemMsgArea1.MAType IN [1,2]) THEN
|
|
IF PYNQ('%LFRemove the message directory? ',0,FALSE) THEN
|
|
PurgeDir(TempMemMsgArea1.MsgPath,TRUE);
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE CheckMessageArea(MemMsgArea: MessageAreaRecordType; StartErrMsg,EndErrMsg: Byte; VAR Ok: Boolean);
|
|
VAR
|
|
Counter: Byte;
|
|
BEGIN
|
|
FOR Counter := StartErrMsg TO EndErrMsg DO
|
|
CASE Counter OF
|
|
1 : IF (MemMsgArea.Name = '') OR (MemMsgArea.Name = '<< New Message Area >>') THEN
|
|
BEGIN
|
|
Print('%LF^7The area name is invalid!^1');
|
|
OK := FALSE;
|
|
END;
|
|
2 : IF (MemMsgArea.FileName = '') OR (MemMsgArea.FileName = 'NEWBOARD') THEN
|
|
BEGIN
|
|
Print('%LF^7The file name is invalid!^1');
|
|
OK := FALSE;
|
|
END;
|
|
3 : IF (MemMsgArea.MAType IN [1,2]) AND (MemMsgArea.MsgPath = '') THEN
|
|
BEGIN
|
|
Print('%LF^7The message path is invalid!^1');
|
|
OK := FALSE;
|
|
END;
|
|
4 : IF (MemMsgArea.MAType IN [1,2]) AND (General.AKA[MemMsgArea.AKA].Net = 0) THEN
|
|
BEGIN
|
|
Print('%LF^7The AKA address is invalid!^1');
|
|
Ok := FALSE;
|
|
END;
|
|
5 : IF (MemMsgArea.MAType IN [1..3]) AND (MemMsgArea.Origin = '') THEN
|
|
BEGIN
|
|
Print('%LF^7The origin is invalid!^1');
|
|
Ok := FALSE;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE EditMessageArea(TempMemMsgArea1: MessageAreaRecordType; VAR MemMsgArea: MessageAreaRecordType; VAR Cmd1: Char;
|
|
VAR RecNumToEdit: SmallInt; VAR Changed: Boolean; Editing: Boolean);
|
|
VAR
|
|
TempFileName: Str8;
|
|
Path1,
|
|
Path2: Str52;
|
|
CmdStr: AStr;
|
|
RecNum,
|
|
RecNum1,
|
|
RecNumToList: Integer;
|
|
SaveQWKIndex: Word;
|
|
Ok: Boolean;
|
|
BEGIN
|
|
WITH MemMsgArea DO
|
|
REPEAT
|
|
IF (Cmd1 <> '?') THEN
|
|
BEGIN
|
|
MCIAllowed := FALSE;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
CLS;
|
|
IF (RecNumToEdit = -1) THEN
|
|
PrintACR('^5Default Message Area Configuration:')
|
|
ELSE
|
|
BEGIN
|
|
IF (Editing) THEN
|
|
PrintACR('^5Editing '+AOnOff(RecNumToEdit = 0,'private mail','message area #'+IntToStr(RecNumToEdit)+
|
|
' of '+IntToStr(NumMsgAreas)))
|
|
ELSE
|
|
PrintACR('^5Inserting message area #'+IntToStr(RecNumToEdit)+' of '+IntToStr(NumMsgAreas + 1));
|
|
END;
|
|
NL;
|
|
PrintACR('^1A. Area name : ^5'+Name);
|
|
PrintACR('^1B. File name : ^5'+FileName+' ^7('+General.MsgPath+MemMsgArea.FileName+'.*)');
|
|
PrintACR('^1C. Area type : ^5'+MATypeStr(MAType));
|
|
IF (MAType IN [1,2]) THEN
|
|
PrintACR('^1 Message path: ^5'+MsgPath);
|
|
PrintACR('^1D. ACS required: ^5'+AOnOff(ACS = '','*None*',ACS));
|
|
PrintACR('^1E. Post/MCI ACS: ^5'+AOnOff(PostACS = '','*None*',PostACS)+'^1 / ^5'
|
|
+AOnOff(MCIACS = '','*None*',MCIACS));
|
|
PrintACR('^1G. Sysop ACS : ^5'+AOnOff(SysOpACS = '','*None*',SysOpACS));
|
|
PrintACR('^1H. Max messages: ^5'+IntToStr(MaxMsgs));
|
|
PrintACR('^1I. Anonymous : ^5'+AnonTypeStr(Anonymous));
|
|
PrintACR('^1K. Password : ^5'+AOnOff(Password = '','*None*',Password));
|
|
IF (MAType IN [1,2]) THEN
|
|
PrintACR('^1M. Net Address : ^5'+NodeStr(AKA));
|
|
PrintACR('^1N. Colors : ^1Text=^'+IntToStr(Text_Color)+IntToStr(Text_Color)+
|
|
'^1, Quote=^'+IntToStr(Quote_Color)+IntToStr(Quote_Color)+
|
|
'^1, Tear=^'+IntToStr(Tear_Color)+IntToStr(Tear_Color)+
|
|
'^1, Origin=^'+IntToStr(Origin_Color)+IntToStr(Origin_Color));
|
|
PrintACR('^1O. Read menu : ^5'+IntToStr(MessageReadMenu));
|
|
IF (MAType IN [1,2]) THEN
|
|
PrintACR('^1P. Mail flags : ^5'+DisplayNetFlags(MAFlags,'5','1'));
|
|
IF (MAType IN [1..3]) THEN
|
|
PrintACR('^1R. Origin line : ^5'+Origin);
|
|
PrintACR('^1S. Start quote : ^5'+AOnOff(QuoteStart = '','*None*',QuoteStart));
|
|
PrintACR('^1T. End quote : ^5'+AOnOff(QuoteEnd = '','*None*',QuoteEnd));
|
|
PrintACR('^1U. Post file : ^5'+AOnOff(PrePostFile = '','*None*',PrePostFile));
|
|
PrintACR('^1V. QWK Index : ^5'+IntToStr(QWKIndex));
|
|
PrintACR('^1W. Flags : ^5'+DisplayMAFlags(MAFlags,'5','1'));
|
|
MCIAllowed := TRUE;
|
|
END;
|
|
IF (RecNumToEdit = 0) THEN
|
|
CmdStr := 'ADEGHNOSTUW'
|
|
ELSE
|
|
BEGIN
|
|
IF (NOT Editing) THEN
|
|
CmdStr := 'ABCDEGHIKNOSTUVW'
|
|
ELSE
|
|
CmdStr := 'ABCDEGHIKNOSTUVW[]FJL';
|
|
IF (MAType IN [1,2]) THEN
|
|
CmdStr := CmdStr + 'MP';
|
|
IF (MAType IN [1..3]) THEN
|
|
CmdStr := CmdStr + 'R';
|
|
END;
|
|
LOneK('%LFModify menu [^5?^4=^5Help^4]: ',Cmd1,'Q?'+CmdStr+^M,TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'A' : REPEAT
|
|
TempMemMsgArea1.Name := MemMsgArea.Name;
|
|
Ok := TRUE;
|
|
InputWNWC('%LFNew area name: ',Name,(SizeOF(Name) - 1),Changed);
|
|
CheckMessageArea(MemMsgArea,1,1,Ok);
|
|
IF (NOT Ok) THEN
|
|
MemMsgArea.Name := TempMemMsgArea1.Name;
|
|
UNTIL (Ok) OR (HangUp);
|
|
'B' : REPEAT
|
|
Ok := TRUE;
|
|
TempFileName := FileName;
|
|
InputWN1('%LFNew file name (^5Do not enter ^4"^5.EXT^4"): ',TempFileName,(SizeOf(FileName) - 1),
|
|
[UpperOnly,InterActiveEdit],Changed);
|
|
TempFileName := SQOutSp(TempFileName);
|
|
IF (Pos('.',TempFileName) > 0) THEN
|
|
FileName := Copy(TempFileName,1,(Pos('.',TempFileName) - 1));
|
|
MemMsgArea.FileName := TempFileName;
|
|
CheckMessageArea(MemMsgArea,2,2,Ok);
|
|
TempFileName := MemMsgArea.FileName;
|
|
IF (Ok) AND (TempFileName <> MemMsgArea.FileName) THEN
|
|
BEGIN
|
|
RecNum1 := -1;
|
|
RecNum := 0;
|
|
WHILE (RecNum <= (FileSize(MsgAreaFile) - 1)) AND (RecNum1 = -1) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,RecNum);
|
|
Read(MsgAreaFile,TempMemMsgArea1);
|
|
IF (TempFileName = TempMemMsgArea1.FileName) THEN
|
|
BEGIN
|
|
Print('%LF^7The file name is already in use!^1');
|
|
RecNum1 := 1;
|
|
IF NOT PYNQ('%LFUse this file name anyway? ',0,FALSE) THEN
|
|
Ok := FALSE;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
END;
|
|
IF (Ok) THEN
|
|
BEGIN
|
|
Path1 := General.MsgPath+MemMsgArea.FileName;
|
|
FileName := TempFileName;
|
|
IF (Editing) THEN
|
|
BEGIN
|
|
Path2 := General.MsgPath+MemMsgArea.FileName;
|
|
IF Exist(Path1+'.HDR') AND (NOT Exist(Path2+'.HDR')) THEN
|
|
BEGIN
|
|
Print('%LFOld HDR/DAT/SCN file names: "^5'+Path1+'.*^1"');
|
|
Print('%LFNew HDR/DAT/SCN file names: "^5'+Path2+'.*^1"');
|
|
IF PYNQ('%LFRename old data files? ',0,FALSE) THEN
|
|
BEGIN
|
|
CopyMoveFile(FALSE,'%LF^1Renaming "^5'+Path1+'.HDR^1" to "^5'+Path2+'.HDR^1": ',Path1+'.HDR',
|
|
Path2+'.HDR',TRUE);
|
|
CopyMoveFile(FALSE,'%LF^1Renaming "^5'+Path1+'.DAT^1" to "^5'+Path2+'.DAT^1": ',Path1+'.DAT',
|
|
Path2+'.DAT',TRUE);
|
|
CopyMoveFile(FALSE,'%LF^1Renaming "^5'+Path1+'.SCN^1" to "^5'+Path2+'.SCN^1": ',Path1+'.SCN',
|
|
Path2+'.SCN',TRUE);
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
UNTIL (Ok) OR (HangUp);
|
|
'C' : BEGIN
|
|
TempMemMsgArea1.MAType := MaType;
|
|
Print('%LF^5Message area types:^1');
|
|
NL;
|
|
LCmds(10,3,'Local','');
|
|
LCmds(10,3,'Echomail','');
|
|
LCmds(10,3,'Groupmail','');
|
|
LCmds(10,3,'QWKmail','');
|
|
LOneK('%LFNew message area type [^5L^4,^5E^4,^5G^4,^5Q^4,^5<CR>^4=^5Quit^4]: ',Cmd1,'LEGQ'^M,TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'L' : MAType := 0;
|
|
'E' : MAType := 1;
|
|
'G' : MAType := 2;
|
|
'Q' : MAType := 3;
|
|
END;
|
|
IF (MAType IN [1,2]) THEN
|
|
BEGIN
|
|
IF (MsgPath <> '') THEN
|
|
MsgPath := MsgPath
|
|
ELSE
|
|
MsgPath := General.DefEchoPath+FileName+'\';
|
|
InputPath('%LF^1New message path (^5End with a ^1"^5\^1"):%LF^4:',MsgPath,FALSE,FALSE,Changed);
|
|
END;
|
|
IF (TempMemMsgArea1.MAtype <> MaType) THEN
|
|
BEGIN
|
|
IF (MaType IN [0,3]) THEN
|
|
BEGIN
|
|
MsgPath := '';
|
|
IF (MASKludge IN MAFlags) THEN
|
|
Exclude(MAFlags,MASKludge);
|
|
IF (MASSeenby IN MAFlags) THEN
|
|
Exclude(MAFlags,MASSeenby);
|
|
IF (MASOrigin IN MAFlags) THEN
|
|
Exclude(MAFlags,MASOrigin);
|
|
IF (MAAddTear IN MAFlags) THEN
|
|
Exclude(MAFlags,MAAddTear);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF (General.SKludge) THEN
|
|
Include(MAFlags,MASKludge);
|
|
IF (General.SSeenby) THEN
|
|
Include(MAFlags,MASSeenby);
|
|
IF (General.SOrigin) THEN
|
|
Include(MAFlags,MASOrigin);
|
|
IF (General.Addtear) THEN
|
|
Include(MAFlags,MAAddTear);
|
|
END;
|
|
IF (MAType = 0) THEN
|
|
Origin := ''
|
|
ELSE
|
|
BEGIN
|
|
IF (General.Origin <> '') THEN
|
|
Origin := General.Origin;
|
|
END;
|
|
Changed := TRUE;
|
|
END;
|
|
Cmd1 := #0;
|
|
END;
|
|
'D' : InputWN1('%LFNew ACS: ',ACS,(SizeOf(ACS) - 1),[InterActiveEdit],Changed);
|
|
'E' : BEGIN
|
|
InputWN1('%LFNew Post ACS: ',PostACS,(SizeOf(PostACS) - 1),[InterActiveEdit],Changed);
|
|
InputWN1('%LFNew MCI ACS: ',MCIACS,(SizeOf(MCIACS) - 1),[InterActiveEdit],Changed);
|
|
END;
|
|
'G' : InputWN1('%LFNew SysOp ACS: ',SysOpACS,(SizeOf(SysOpACS) - 1),[InterActiveEdit],Changed);
|
|
'H' : InputWordWC('%LFMax messages',MaxMsgs,[DisplayValue,NumbersOnly],1,65535,Changed);
|
|
'I' : BEGIN
|
|
TempMemMsgArea1.Anonymous := Anonymous;
|
|
Print('%LF^5Anonymous types:^1');
|
|
NL;
|
|
LCmds(40,3,'Yes, Anonymous allowed, selectively','');
|
|
LCmds(40,3,'No, Anonymous not allowed','');
|
|
LCmds(40,3,'Forced Anonymous','');
|
|
LCmds(40,3,'Dear Abby','');
|
|
LCmds(40,3,'Any Name','');
|
|
LOneK('%LFNew anonymous type [^5Y^4,^5N^4,^5F^4,^5D^4,^5A^4,^5<CR>^4=^5Quit^4]: ',Cmd1,'YNFDA'^M,TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'Y' : Anonymous := ATYes;
|
|
'N' : Anonymous := ATNo;
|
|
'F' : Anonymous := ATForced;
|
|
'D' : Anonymous := ATDearAbby;
|
|
'A' : Anonymous := ATAnyName;
|
|
END;
|
|
IF (TempMemMsgArea1.Anonymous <> Anonymous) THEN
|
|
Changed := TRUE;
|
|
Cmd1 := #0;
|
|
END;
|
|
'K' : InputWN1('%LFNew password: ',Password,(SizeOf(Password) - 1),[InterActiveEdit,UpperOnly],Changed);
|
|
'M' : IF (MAType IN [1,2]) THEN
|
|
BEGIN
|
|
TempMemMsgArea1.AKA := AKA;
|
|
REPEAT
|
|
Ok := TRUE;
|
|
Print('%LF^5Network addresses:');
|
|
NL;
|
|
FOR RecNum := 0 TO 19 DO
|
|
BEGIN
|
|
Prompt('^1'+PadRightStr(IntToStr(RecNum),2)+'. ^5'+PadLeftStr(NodeStr(RecNum),25));
|
|
IF (Odd(RecNum)) THEN
|
|
NL;
|
|
END;
|
|
InputByteWOC('%LFNew AKA address',AKA,[DisplayValue,NumbersOnly],0,19);
|
|
CheckMessageArea(MemMsgArea,4,4,Ok);
|
|
IF (NOT Ok) THEN
|
|
AKA := TempMemMsgArea1.AKA;
|
|
UNTIL (Ok) OR (HangUp);
|
|
IF (TempMemMsgArea1.AKA <> AKA) THEN
|
|
Changed := TRUE;
|
|
END;
|
|
'N' : BEGIN
|
|
Prompt('%LF^5Colors: ');
|
|
ShowColors;
|
|
InputByteWC('%LFNew standard text color',Text_Color,[DisplayValue,NumbersOnly],0,9,Changed);
|
|
InputByteWC('%LFNew quoted text color',Quote_Color,[DisplayValue,NumbersOnly],0,9,Changed);
|
|
InputByteWC('%LFNew tear line color',Tear_Color,[DisplayValue,NumbersOnly],0,9,Changed);
|
|
InputByteWC('%LFNew origin line color',Origin_Color,[DisplayValue,NumbersOnly],0,9,Changed);
|
|
END;
|
|
'O' : FindMenu('%LFNew read menu (^50^4=^5Default^4)',MessageReadMenu,0,NumMenus,Changed);
|
|
'P' : IF (MAType IN [1,2]) THEN
|
|
BEGIN
|
|
REPEAT
|
|
LOneK('%LFToggle which network flag ('+DisplayNetFlags(MAFlags,'5','4')+
|
|
'^4) [^5?^4=^5Help^4,^5<CR>^4=^5Quit^4]: ',Cmd1,^M'IKSOCBMT?',TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'K','S','O','T','I' :
|
|
ToggleMAFlags(Cmd1,MAFlags,Changed);
|
|
'?' : BEGIN
|
|
NL;
|
|
LCmds(22,3,'Kludge line strip','SEEN-BY line strip');
|
|
LCmds(22,3,'Origin line strip','Tear/Origin line add');
|
|
LCmds(22,3,'Internet flag','');
|
|
END;
|
|
END;
|
|
UNTIL (Cmd1 = ^M) OR (HangUp);
|
|
Cmd1 := #0;
|
|
END;
|
|
'R' : IF (MAType IN [1..3]) THEN
|
|
REPEAT
|
|
OK := TRUE;
|
|
InputWN1('%LF^4New origin line:%LF: ',Origin,(SizeOf(Origin) - 1),[InterActiveEdit],Changed);
|
|
CheckMessageArea(MemMsgArea,5,5,Ok);
|
|
UNTIL (Ok) OR (HangUp);
|
|
'S' : InputWNWC('%LF^1New starting quote:%LF^4: ',QuoteStart,(SizeOf(QuoteStart) - 1),Changed);
|
|
'T' : InputWNWC('%LF^1New ending quote:%LF^4: ',QuoteEnd,(SizeOf(QuoteEnd) - 1),Changed);
|
|
'U' : InputWN1('%LFNew pre-post filename: ',PrePostFile,(SizeOf(PrePostFile) - 1),[],Changed);
|
|
'V' : BEGIN
|
|
SaveQWKIndex := QWKIndex;
|
|
InputWordWOC('%LFNew permanent QWK Index',QWKIndex,[DisplayValue,NumbersOnly],1,(NumMsgAreas + 1));
|
|
IF (SaveQWKIndex <> QWKIndex) AND (QWKIndex >= 1) AND (QWKIndex <= (NumMsgAreas + 1)) THEN
|
|
BEGIN
|
|
RecNum1 := -1;
|
|
RecNum := 0;
|
|
WHILE (RecNum <= (FileSize(MsgAreaFile) - 1)) AND (RecNum1 = -1) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,RecNum);
|
|
Read(MsgAreaFile,TempMemMsgArea1);
|
|
IF (QWKIndex = TempMemMsgArea1.QWKIndex) THEN
|
|
BEGIN
|
|
Print('%LF^7The QWK Index number is already in use!^1');
|
|
PauseScr(FALSE);
|
|
RecNum1 := 1;
|
|
QWKIndex := SaveQWKIndex;
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
END;
|
|
IF (SaveQWKIndex <> QWKIndex) THEN
|
|
Changed := TRUE;
|
|
END;
|
|
'W' : BEGIN
|
|
REPEAT
|
|
LOneK('%LFToggle which flag ('+DisplayMAFlags(MAFlags,'5','4')+
|
|
'^4) [^5?^4=^5Help^4,^5<CR>^4=^5Quit^4]: ',Cmd1,^M'RUAPFQ?',TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'R','U','A','P','F','Q' :
|
|
ToggleMAFlags(Cmd1,MAFlags,Changed);
|
|
'?' : BEGIN
|
|
NL;
|
|
LCmds(25,3,'Real names','Unhidden');
|
|
LCmds(25,3,'AFilter ANSI/8-bit ASCII','Private msgs allowed');
|
|
LCmds(25,3,'Force Read','Quote/Tagline');
|
|
END;
|
|
END;
|
|
UNTIL (Cmd1 = ^M) OR (HangUp);
|
|
Cmd1 := #0;
|
|
END;
|
|
'[' : IF (RecNumToEdit > 1) THEN
|
|
Dec(RecNumToEdit)
|
|
ELSE
|
|
BEGIN
|
|
Messages(2,0,'');
|
|
Cmd1 := #0;
|
|
END;
|
|
']' : IF (RecNumToEdit < NumMsgAreas) THEN
|
|
Inc(RecNumToEdit)
|
|
ELSE
|
|
BEGIN
|
|
Messages(3,0,'');
|
|
Cmd1 := #0;
|
|
END;
|
|
'F' : IF (RecNumToEdit <> 1) THEN
|
|
RecNumToEdit := 1
|
|
ELSE
|
|
BEGIN
|
|
Messages(2,0,'');
|
|
Cmd1 := #0;
|
|
END;
|
|
'J' : BEGIN
|
|
InputIntegerWOC('%LFJump to entry?',RecNumToEdit,[NumbersOnly],1,NumMsgAreas);
|
|
IF (RecNumToEdit < 1) OR (RecNumToEdit > NumMsgAreas) THEN
|
|
Cmd1 := #0;
|
|
END;
|
|
'L' : IF (RecNumToEdit <> NumMsgAreas) THEN
|
|
RecNumToEdit := NumMsgAreas
|
|
ELSE
|
|
BEGIN
|
|
Messages(3,0,'');
|
|
Cmd1 := #0;
|
|
END;
|
|
'?' : BEGIN
|
|
Print('%LF^1<^3CR^1>Redisplay current screen');
|
|
Print('^3A^1-^3E^1,^3G^1-^3I^1,^3K^1,^3M^1-^3P^1,^3R^1-^3W^1:Modify item');
|
|
IF (NOT Editing) THEN
|
|
LCmds(20,3,'Quit and save','')
|
|
ELSE
|
|
BEGIN
|
|
LCmds(20,3,'[Back entry',']Forward entry');
|
|
LCmds(20,3,'First entry in list','Jump to entry');
|
|
LCmds(20,3,'Last entry in list','Quit and save');
|
|
END;
|
|
END;
|
|
END;
|
|
UNTIL (Pos(Cmd1,'Q[]FJL') <> 0) OR (HangUp);
|
|
END;
|
|
|
|
PROCEDURE InsertMsgArea(TempMemMsgArea1: MessageAreaRecordType; Cmd1: Char; RecNumToInsertBefore: SmallInt);
|
|
VAR
|
|
MsgAreaScanFile: FILE OF ScanRec;
|
|
RecNum,
|
|
RecNum1,
|
|
RecNumToEdit: SmallInt;
|
|
Ok,
|
|
Changed: Boolean;
|
|
BEGIN
|
|
IF (NumMsgAreas = MaxMsgAreas) THEN
|
|
Messages(5,MaxMsgAreas,'message areas')
|
|
ELSE
|
|
BEGIN
|
|
RecNumToInsertBefore := -1;
|
|
InputIntegerWOC('%LFMessage area to insert before?',RecNumToInsertBefore,[NumbersOnly],1,(NumMsgAreas + 1));
|
|
IF (RecNumToInsertBefore >= 1) AND (RecNumToInsertBefore <= (NumMsgAreas + 1)) THEN
|
|
BEGIN
|
|
Reset(MsgAreaFile);
|
|
|
|
Assign(MsgAreaDefFile,General.DataPath+'MBASES.DEF');
|
|
IF (NOT Exist(General.DataPath+'MBASES.DEF')) THEN
|
|
InitMsgAreaVars(TempMemMsgArea1)
|
|
ELSE
|
|
BEGIN
|
|
Reset(MsgAreaDefFile);
|
|
Seek(MsgAreaDefFile,0);
|
|
Read(MsgAreaDefFile,TempMemMsgArea1);
|
|
Close(MsgAreaDefFile);
|
|
END;
|
|
|
|
TempMemMsgArea1.QWKIndex := (FileSize(MsgAreaFile) + 1);
|
|
IF (RecNumToInsertBefore = 1) THEN
|
|
RecNumToEdit := 1
|
|
ELSE IF (RecNumToInsertBefore = (NumMsgAreas + 1)) THEN
|
|
RecNumToEdit := (NumMsgAreas + 1)
|
|
ELSE
|
|
RecNumToEdit := RecNumToInsertBefore;
|
|
REPEAT
|
|
OK := TRUE;
|
|
EditMessageArea(TempMemMsgArea1,TempMemMsgArea1,Cmd1,RecNumToEdit,Changed,FALSE);
|
|
CheckMessageArea(TempMemMsgArea1,1,5,Ok);
|
|
IF (NOT OK) THEN
|
|
IF (NOT PYNQ('%LFContinue inserting message area? ',0,TRUE)) THEN
|
|
Abort := TRUE;
|
|
UNTIL (OK) OR (Abort) OR (HangUp);
|
|
IF (NOT Abort) AND (PYNQ('%LFIs this what you want? ',0,FALSE)) THEN
|
|
BEGIN
|
|
Print('%LF[> Inserting message area record ...');
|
|
Seek(MsgAreaFile,FileSize(MsgAreaFile));
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
Dec(RecNumToInsertBefore);
|
|
FOR RecNum := ((FileSize(MsgAreaFile) - 1) - 1) DOWNTO RecNumToInsertBefore DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,RecNum);
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
Seek(MsgAreaFile,(RecNum + 1));
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
FOR RecNum := RecNumToInsertBefore TO ((RecNumToInsertBefore + 1) - 1) DO
|
|
BEGIN
|
|
IF (TempMemMsgArea1.MAType IN [1,2]) THEN
|
|
MakeDir(TempMemMsgArea1.MsgPath,FALSE);
|
|
IF (NOT Exist(General.MsgPath+TempMemMsgArea1.FileName+'.HDR')) THEN
|
|
BEGIN
|
|
Assign(MsgHdrF,General.MsgPath+TempMemMsgArea1.FileName+'.HDR');
|
|
ReWrite(MsgHdrF);
|
|
Close(MsgHdrF);
|
|
END;
|
|
IF (NOT Exist(General.MsgPath+TempMemMsgArea1.FileName+'.DAT')) THEN
|
|
BEGIN
|
|
Assign(MsgTxtF,General.MsgPath+TempMemMsgArea1.FileName+'.DAT');
|
|
ReWrite(MsgTxtF,1);
|
|
Close(MsgTxtF);
|
|
END;
|
|
IF (NOT Exist(General.MsgPath+TempMemMsgArea1.FileName+'.SCN')) THEN
|
|
BEGIN
|
|
Assign(MsgAreaScanFile,General.MsgPath+TempMemMsgArea1.FileName+'.SCN');
|
|
ReWrite(MsgAreaScanFile);
|
|
Close(MsgAreaScanFile);
|
|
END;
|
|
IF (Exist(General.MsgPath+TempMemMsgArea1.FileName+'.SCN')) THEN
|
|
BEGIN
|
|
Assign(MsgAreaScanFile,General.MsgPath+TempMemMsgArea1.FileName+'.SCN');
|
|
Reset(MsgAreaScanFile);
|
|
WITH LastReadRecord DO
|
|
BEGIN
|
|
LastRead := 0;
|
|
NewScan := TRUE;
|
|
END;
|
|
FOR RecNum1 := (FileSize(MsgAreaScanFile) + 1) TO (MaxUsers - 1) DO
|
|
Write(MsgAreaScanFile,LastReadRecord);
|
|
Close(MsgAreaScanFile);
|
|
END;
|
|
Seek(MsgAreaFile,RecNum);
|
|
Write(MsgAreaFile,TempMemMsgArea1);
|
|
Inc(NumMsgAreas);
|
|
SysOpLog('* Inserted message area: ^5'+TempMemMsgArea1.Name);
|
|
END;
|
|
END;
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE ModifyMsgArea(TempMemMsgArea1: MessageAreaRecordType; Cmd1: Char; RecNumToEdit: SmallInt);
|
|
VAR
|
|
User: UserRecordType;
|
|
MsgAreaScanFile: FILE OF ScanRec;
|
|
RecNum1,
|
|
SaveRecNumToEdit: Integer;
|
|
Ok,
|
|
Changed: Boolean;
|
|
BEGIN
|
|
RecNumToEdit := -1;
|
|
InputIntegerWOC('%LFModify which message area?',RecNumToEdit,[NumbersOnly],0,NumMsgAreas);
|
|
IF ((RecNumToEdit >= 0) AND (RecNumToEdit <= NumMsgAreas)) THEN
|
|
BEGIN
|
|
SaveRecNumToEdit := -1;
|
|
Cmd1 := #0;
|
|
IF (RecNumToEdit = 0) THEN
|
|
BEGIN
|
|
Assign(EMailFile,General.DataPath+'MEMAIL.DAT');
|
|
Reset(EmailFile);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Assign(MsgAreaFile,General.DataPath+'MBASES.DAT');
|
|
Reset(MsgAreaFile);
|
|
END;
|
|
WHILE (Cmd1 <> 'Q') AND (NOT HangUp) DO
|
|
BEGIN
|
|
IF (SaveRecNumToEdit <> RecNumToEdit) THEN
|
|
BEGIN
|
|
IF (RecNumToEdit = 0) THEN
|
|
BEGIN
|
|
Seek(EMailFile,0);
|
|
Read(EMailFile,MemMsgArea);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNumToEdit - 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
SaveRecNumToEdit := RecNumToEdit;
|
|
Changed := FALSE;
|
|
END;
|
|
REPEAT
|
|
Ok := TRUE;
|
|
EditMessageArea(TempMemMsgArea1,MemMsgArea,Cmd1,RecNumToEdit,Changed,TRUE);
|
|
CheckMessageArea(MemMsgArea,1,5,Ok);
|
|
IF (NOT OK) THEN
|
|
BEGIN
|
|
PauseScr(FALSE);
|
|
IF (RecNumToEdit <> SaveRecNumToEdit) THEN
|
|
RecNumToEdit := SaveRecNumToEdit;
|
|
END;
|
|
UNTIL (Ok) OR (HangUp);
|
|
IF (MemMsgArea.MAType IN [1,2]) THEN
|
|
MakeDir(MemMsgArea.MsgPath,FALSE);
|
|
IF (NOT Exist(General.MsgPath+MemMsgArea.FileName+'.HDR')) THEN
|
|
BEGIN
|
|
Assign(MsgHdrF,General.MsgPath+MemMsgArea.FileName+'.HDR');
|
|
ReWrite(MsgHdrF);
|
|
Close(MsgHdrF);
|
|
END;
|
|
IF (NOT Exist(General.MsgPath+MemMsgArea.FileName+'.DAT')) THEN
|
|
BEGIN
|
|
Assign(MsgTxtF,General.MsgPath+MemMsgArea.FileName+'.DAT');
|
|
ReWrite(MsgTxtF,1);
|
|
Close(MsgTxtF);
|
|
END;
|
|
IF (RecNumToEdit <> 0) THEN
|
|
BEGIN
|
|
IF (NOT Exist(General.MsgPath+MemMsgArea.FileName+'.SCN')) THEN
|
|
BEGIN
|
|
Assign(MsgAreaScanFile,General.MsgPath+MemMsgArea.FileName+'.SCN');
|
|
ReWrite(MsgAreaScanFile);
|
|
Close(MsgAreaScanFile);
|
|
END;
|
|
IF (Exist(General.MsgPath+MemMsgArea.FileName+'.SCN')) THEN
|
|
BEGIN
|
|
Assign(MsgAreaScanFile,General.MsgPath+MemMsgArea.FileName+'.SCN');
|
|
Reset(MsgAreaScanFile);
|
|
WITH LastReadRecord DO
|
|
BEGIN
|
|
LastRead := 0;
|
|
NewScan := TRUE;
|
|
END;
|
|
Seek(MsgAreaScanFile,FileSize(MsgAreaScanFile));
|
|
FOR RecNum1 := (FileSize(MsgAreaScanFile) + 1) TO (MaxUsers - 1) DO
|
|
Write(MsgAreaScanFile,LastReadRecord);
|
|
Reset(UserFile);
|
|
FOR RecNum1 := 1 TO (MaxUsers - 1) DO
|
|
BEGIN
|
|
LoadURec(User,RecNum1);
|
|
IF (Deleted IN User.SFlags) THEN
|
|
BEGIN
|
|
Seek(MsgAreaScanFile,(RecNum1 - 1));
|
|
Write(MsgAreaScanFile,LastReadRecord);
|
|
END;
|
|
END;
|
|
Close(UserFile);
|
|
Close(MsgAreaScanFile);
|
|
END;
|
|
END;
|
|
IF (Changed) THEN
|
|
BEGIN
|
|
IF (RecNumToEdit = 0) THEN
|
|
BEGIN
|
|
Seek(EMailFile,0);
|
|
Write(EMailFile,MemMsgArea);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Seek(MsgAreaFile,(SaveRecNumToEdit - 1));
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
SysOpLog('* Modified message area: ^5'+MemMsgArea.Name);
|
|
END;
|
|
END;
|
|
IF (RecNumToEdit = 0) THEN
|
|
Close(EmailFile)
|
|
ELSE
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE PositionMsgArea(TempMemMsgArea1: MessageAreaRecordType; RecNumToPosition: SmallInt);
|
|
VAR
|
|
RecNumToPositionBefore,
|
|
RecNum1,
|
|
RecNum2: SmallInt;
|
|
BEGIN
|
|
IF (NumMsgAreas = 0) THEN
|
|
Messages(4,0,'message areas')
|
|
ELSE IF (NumMsgAreas = 1) THEN
|
|
Messages(6,0,'message areas')
|
|
ELSE
|
|
BEGIN
|
|
RecNumToPosition := -1;
|
|
InputIntegerWOC('%LFPosition which message area?',RecNumToPosition,[NumbersOnly],1,NumMsgAreas);
|
|
IF (RecNumToPosition >= 1) AND (RecNumToPosition <= NumMsgAreas) THEN
|
|
BEGIN
|
|
RecNumToPositionBefore := -1;
|
|
Print('%LFAccording to the current numbering system.');
|
|
InputIntegerWOC('%LFPosition before which message area?',RecNumToPositionBefore,[NumbersOnly],1,(NumMsgAreas + 1));
|
|
IF (RecNumToPositionBefore >= 1) AND (RecNumToPositionBefore <= (NumMsgAreas + 1)) AND
|
|
(RecNumToPositionBefore <> RecNumToPosition) AND (RecNumToPositionBefore <> (RecNumToPosition + 1)) THEN
|
|
BEGIN
|
|
Print('%LF[> Positioning message area records ...');
|
|
IF (RecNumToPositionBefore > RecNumToPosition) THEN
|
|
Dec(RecNumToPositionBefore);
|
|
Dec(RecNumToPosition);
|
|
Dec(RecNumToPositionBefore);
|
|
Reset(MsgAreaFile);
|
|
Seek(MsgAreaFile,RecNumToPosition);
|
|
Read(MsgAreaFile,TempMemMsgArea1);
|
|
RecNum1 := RecNumToPosition;
|
|
IF (RecNumToPosition > RecNumToPositionBefore) THEN
|
|
RecNum2 := -1
|
|
ELSE
|
|
RecNum2 := 1;
|
|
WHILE (RecNum1 <> RecNumToPositionBefore) DO
|
|
BEGIN
|
|
IF ((RecNum1 + RecNum2) < FileSize(MsgAreaFile)) THEN
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNum1 + RecNum2));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
Seek(MsgAreaFile,RecNum1);
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
END;
|
|
Inc(RecNum1,RecNum2);
|
|
END;
|
|
Seek(MsgAreaFile,RecNumToPositionBefore);
|
|
Write(MsgAreaFile,TempMemMsgArea1);
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE RenumberQWKIndex;
|
|
VAR
|
|
RecNum: Integer;
|
|
BEGIN
|
|
IF (NumMsgAreas = 0) THEN
|
|
Messages(4,0,'message areas')
|
|
ELSE
|
|
BEGIN
|
|
IF PYNQ('%LFRenumber QWK Index for all message areas? ',0,FALSE) THEN
|
|
BEGIN
|
|
Prompt('%LFRenumbering the QWK index''s for all areas ... ');
|
|
Reset(MsgAreaFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= NumMsgAreas) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNum - 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
MemMsgArea.QWKIndex := RecNum;
|
|
Seek(MsgAreaFile,(RecNum - 1));
|
|
Write(MsgAreaFile,MemMsgArea);
|
|
Inc(RecNum);
|
|
END;
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
Print('Done');
|
|
SysOpLog('* Renumbered the QWK index for all message areas.');
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DisplayMsgArea(RecNumToList1: Integer);
|
|
BEGIN
|
|
WITH MemMsgArea DO
|
|
CASE DisplayType OF
|
|
1 : PrintACR('^0'+PadRightInt(RecNumToList1,5)+
|
|
' ^5'+PadLeftStr(Name,24)+
|
|
' ^3'+Copy('LEGQ',(MAType + 1),1)+DisplayMAFlags(MAFlags,'5','4')+
|
|
' ^9'+PadLeftStr(AOnOff(ACS = '','*None*',ACS),10)+
|
|
' '+PadLeftStr(AOnOff(PostACS = '','*None*',PostACS),9)+
|
|
' '+PadLeftStr(AOnOff(MCIACS = '','*None*',MCIACS),9)+
|
|
' ^3'+PadLeftInt(MaxMsgs,6)+
|
|
' '+AnonTypeChar(Anonymous));
|
|
2 : PrintACR('^0'+PadRightInt(RecNumToList1,5)+
|
|
' ^5'+PadLeftStr(Name,27)+
|
|
' ^3'+PadLeftStr(AOnOff(MAType IN [0,3],'*None*',NodeStr(AKA)),11)+
|
|
' '+PadLeftStr(AOnOff(MsgPath = '','*None*',MsgPath),33));
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE ListMsgAreas(VAR RecNumToList1: SmallInt);
|
|
VAR
|
|
NumDone: Integer;
|
|
BEGIN
|
|
IF (RecNumToList1 < 0) OR (RecNumToList1 > NumMsgAreas) THEN
|
|
RecNumToList1 := 0;
|
|
MCIAllowed := FALSE;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
CLS;
|
|
CASE DisplayType OF
|
|
1 : BEGIN
|
|
PrintACR('^0#####^4:^3Message area name ^4:^3Flag ^4:^3ACS ^4:^3Post ACS ^4:^3MCI ACS'+
|
|
' ^4:^3MaxM ^4:^3A');
|
|
PrintACR('^4=====:========================:=======:==========:=========:=========:======:=');
|
|
END;
|
|
2 : BEGIN
|
|
PrintACR('^0#####^4:^3Message area name ^4:^3Address ^4:^3Message path');
|
|
PrintACR('^4=====:===========================:===========:=================================');
|
|
END;
|
|
END;
|
|
IF (RecNumToList1 = 0) THEN
|
|
BEGIN
|
|
NumDone := 0;
|
|
Assign(EmailFile,General.DataPath+'MEMAIL.DAT');
|
|
Reset(EMailFile);
|
|
Seek(EmailFile,RecNumToList1);
|
|
Read(EMailFile,MemMsgArea);
|
|
DisplayMsgArea(RecNumToList1);
|
|
Close(EmailFile);
|
|
LastError := IOResult;
|
|
RecNumToList := 1;
|
|
END;
|
|
Assign(MsgAreaFile,General.DataPath+'MBASES.DAT');
|
|
Reset(MsgAreaFile);
|
|
NumDone := 1;
|
|
WHILE (NumDone < (PageLength - 5)) AND (RecNumToList1 >= 1) AND (RecNumToList1 <= NumMsgAreas)
|
|
AND (NOT Abort) AND (NOT HangUp) DO
|
|
BEGIN
|
|
Seek(MsgAreaFile,(RecNumToList1 - 1));
|
|
Read(MsgAreaFile,MemMsgArea);
|
|
DisplayMsgArea(RecNumToList1);
|
|
Inc(RecNumToList1);
|
|
Inc(NumDone);
|
|
END;
|
|
Close(MsgAreaFile);
|
|
LastError := IOResult;
|
|
MCIAllowed := TRUE;
|
|
END;
|
|
|
|
BEGIN
|
|
SaveTempPause := TempPause;
|
|
TempPause := FALSE;
|
|
RecNumToList := 0;
|
|
Cmd := #0;
|
|
REPEAT
|
|
IF (Cmd <> '?') THEN
|
|
ListMsgAreas(RecNumToList);
|
|
LOneK('%LFMessage area editor [^5?^4=^5Help^4]: ',Cmd,'QCDIMPRTX?'^M,TRUE,TRUE);
|
|
CASE Cmd OF
|
|
^M : IF (RecNumToList < 0) OR (RecNumToList > NumMsgAreas) THEN
|
|
RecNumToList := 0;
|
|
'C' : ChangeMsgAreaDrive(Cmd,RecNumToList);
|
|
'D' : DeleteMsgArea(TempMemMsgArea,RecNumToList);
|
|
'I' : InsertMsgArea(TempMemMsgArea,Cmd,RecNumToList);
|
|
'M' : ModifyMsgArea(TempMemMsgArea,Cmd,RecNumToList);
|
|
'P' : PositionMsgArea(TempMemMsgArea,RecNumToList);
|
|
'R' : ReNumberQWKIndex;
|
|
'T' : DisplayType := ((DisplayType MOD 2) + 1);
|
|
'X' : BEGIN
|
|
Assign(MsgAreaDefFile,General.DataPath+'MBASES.DEF');
|
|
IF (Exist(General.DataPath+'MBASES.DEF')) THEN
|
|
BEGIN
|
|
Reset(MsgAreaDefFile);
|
|
Seek(MsgAreaDefFile,0);
|
|
Read(MsgAreaDefFile,MemMsgArea);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
ReWrite(MsgAreaDefFile);
|
|
InitMsgAreaVars(MemMsgArea);
|
|
END;
|
|
RecNumToList := -1;
|
|
EditMessageArea(TempMemMsgArea,MemMsgArea,Cmd,RecNumToList,Changed,FALSE);
|
|
Seek(MsgAreaDefFile,0);
|
|
Write(MsgAreaDefFile,MemMsgArea);
|
|
Close(MsgAreaDefFile);
|
|
Cmd := #0;
|
|
END;
|
|
'?' : BEGIN
|
|
Print('%LF^1<^3CR^1>Next screen or redisplay current screen');
|
|
Print('^1(^3?^1)Help/First message area');
|
|
LCmds(22,3,'Change message storage drive','');
|
|
LCmds(22,3,'Delete message area','Insert message area');
|
|
LCmds(22,3,'Modify message area','Position message area');
|
|
LCmds(22,3,'Quit','Renumber QWK index');
|
|
LCmds(22,3,'Toggle display format','XDefault configuration');
|
|
END;
|
|
END;
|
|
IF (Cmd <> ^M) THEN
|
|
RecNumToList := 0;
|
|
UNTIL (Cmd = 'Q') OR (HangUp);
|
|
TempPause := SaveTempPause;
|
|
NewComptables;
|
|
IF ((MsgArea < 1) OR (MsgArea > NumMsgAreas)) THEN
|
|
MsgArea := 1;
|
|
ReadMsgArea := -1;
|
|
LoadMsgArea(MsgArea);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
END.
|
|
|