Renegade-1.19/SOURCE/SYSOP2B.PAS

231 lines
9.7 KiB
Plaintext

{$IFDEF WIN32}
{$I DEFINES.INC}
{$ENDIF}
{$A+,B-,D+,E-,L+,I-,L+,N-,O+,R-,S+,V-}
UNIT SysOp2B;
INTERFACE
PROCEDURE ModemConfiguration;
IMPLEMENTATION
USES
Common;
PROCEDURE ModemConfiguration;
VAR
LineFile: FILE OF LineRec;
Cmd: Char;
TempB: Byte;
Changed: Boolean;
PROCEDURE ToggleMFlag(MFlagT: ModemFlagType; VAR MFlags: MFlagSet);
BEGIN
IF (MFlagT IN MFlags) THEN
Exclude(MFlags,MFlagT)
ELSE
Include(MFlags,MFlagT);
END;
PROCEDURE ToggleMFlags(C: Char; VAR MFlags: MFlagSet; VAR Changed: Boolean);
VAR
SaveMFlags: MFlagSet;
BEGIN
SaveMFlags := MFlags;
CASE C OF
'7' : ToggleMFlag(LockedPort,MFlags);
'8' : ToggleMFlag(XONXOFF,MFlags);
'9' : ToggleMFlag(CTSRTS,MFlags);
END;
IF (MFlags <> SaveMFlags) THEN
Changed := TRUE;
END;
PROCEDURE NewModemString(CONST DisplayStr: AStr; VAR InputStr: AStr; Len: Byte);
VAR
Changed: Boolean;
BEGIN
Print('%LF^1Current modem '+DisplayStr+' string: "^5'+InputStr+'^1"');
Print('%LFUse: "|" for a carriage return');
Print(' "~" for a half-second delay');
Print(' "^" to toggle DTR off for 1/4 second');
InputWN1('%LF^1Enter new modem '+DisplayStr+' string:%LF^4: ',InputStr,Len,[InterActiveEdit],Changed);
END;
FUNCTION WhichBaud(B: Byte): AStr;
BEGIN
CASE B OF
1 : WhichBaud := 'CONNECT 300';
2 : WhichBaud := 'CONNECT 600';
3 : WhichBaud := 'CONNECT 1200';
4 : WhichBaud := 'CONNECT 2400';
5 : WhichBaud := 'CONNECT 4800';
6 : WhichBaud := 'CONNECT 7200';
7 : WhichBaud := 'CONNECT 9600';
8 : WhichBaud := 'CONNECT 12000';
9 : WhichBaud := 'CONNECT 14400';
10 : WhichBaud := 'CONNECT 16800';
11 : WhichBaud := 'CONNECT 19200';
12 : WhichBaud := 'CONNECT 21600';
13 : WhichBaud := 'CONNECT 24000';
14 : WhichBaud := 'CONNECT 26400';
15 : WhichBaud := 'CONNECT 28800';
16 : WhichBaud := 'CONNECT 31200';
17 : WhichBaud := 'CONNECT 33600';
18 : WhichBaud := 'CONNECT 38400';
19 : WhichBaud := 'CONNECT 57600';
20 : WhichBaud := 'CONNECT 115200';
END;
END;
BEGIN
Assign(LineFile,General.DataPath+'NODE'+IntToStr(ThisNode)+'.DAT');
Reset(LineFile);
Read(LineFile,Liner);
REPEAT
WITH Liner DO
BEGIN
Abort := FALSE;
Next := FALSE;
Print('%CL^5Modem/Node Configuration:');
NL;
PrintACR('^11. Maximum baud rate: ^5'+PadLeftInt(InitBaud,20)+
'^12. Port number : ^5'+IntToStr(ComPort));
PrintACR('^13. Modem init : ^5'+PadLeftStr(Init,20)+
'^14. Modem answer : ^5'+Answer);
PrintACR('^15. Modem HangUp : ^5'+PadLeftStr(HangUp,20)+
'^16. Modem offhook : ^5'+Offhook);
PrintACR('^17. COM port locking : ^5'+PadLeftStr(ShowOnOff(LockedPort IN MFlags),20)+
'^18. XON/XOFF flow : ^5'+ShowOnOff(XONXOFF IN MFlags));
PrintACR('^19. CTS/RTS flow : ^5'+PadLeftStr(ShowOnOff(CTSRTS IN MFlags),20)+
'^1A. ACS for this node: ^5'+LogonACS);
PrintACR('^1B. Drop file path : ^5'+PadLeftStr(DoorPath,20)+
'^1C. Answer on ring : ^5'+IntToStr(AnswerOnRing));
PrintACR('^1D. TeleConf Normal : ^5'+PadLeftStr(TeleConfNormal,20)+
'^1E. MultiRing only : ^5'+ShowOnOff(MultiRing));
PrintACR('^1F. TeleConf Anon : ^5'+PadLeftStr(TeleConfAnon,20));
PrintACR('^1G. TeleConf Global : ^5'+TeleConfGlobal);
PrintACR('^1H. TeleConf Private : ^5'+TeleConfPrivate);
PrintACR('^1I. IRQ string : ^5'+IRQ);
PrintACR('^1J. Address string : ^5'+Address);
PrintACR('^1R. Modem result codes');
Prt('%LFEnter selection [^51^4-^59^4,^5A^4-^5J^4,^5R^4,^5Q^4=^5Quit^4]: ');
OneK(Cmd,'Q123456789ABCDEFGHIJR'^M,TRUE,TRUE);
CASE Cmd OF
'1' : IF (InCom) THEN
BEGIN
Print('%LF^7This can only be changed locally.');
PauseScr(FALSE);
END
ELSE
BEGIN
Print('%LF^5Modem maximum baud rates:^1');
Print('%LF^1(^3A^1). 2400');
Print('^1(^3B^1). 9600');
Print('^1(^3C^1). 19200');
Print('^1(^3D^1). 38400');
Print('^1(^3E^1). 57600');
Print('^1(^3F^1). 115200');
LOneK('%LFModem speed? [^5A^4-^5F^4,^5<CR>^4=^5Quit^4]: ',Cmd,^M'ABCDEF',TRUE,TRUE);
CASE Cmd OF
'A' : InitBaud := 2400;
'B' : InitBaud := 9600;
'C' : InitBaud := 19200;
'D' : InitBaud := 38400;
'E' : InitBaud := 57600;
'F' : InitBaud := 115200;
END;
Cmd := #0;
END;
'2' : IF (InCom) THEN
BEGIN
Print('%LF^7This can only be changed locally.');
PauseScr(FALSE);
END
ELSE
BEGIN
TempB := ComPort;
InputByteWC('%LFCom port',TempB,[DisplayValue,NumbersOnly],0,64,Changed);
IF (Changed) THEN
IF PYNQ('%LFAre you sure this is what you want? ',0,FALSE) THEN
BEGIN
Com_DeInstall;
ComPort := TempB;
Com_Install;
END;
IF (NOT LocalIOOnly) AND (ComPort = 0) THEN
LocalIOOnly := TRUE;
END;
'3' : NewModemString('init',Init,(SizeOf(Init) - 1));
'4' : NewModemString('answer',Answer,(SizeOf(Answer) - 1));
'5' : NewModemString('hangup',HangUp,(SizeOf(HangUp) - 1));
'6' : NewModemString('offhook',Offhook,(SizeOf(Offhook) - 1));
'7' : ToggleMFlags('7',MFlags,Changed);
'8' : ToggleMFlags('8',MFlags,Changed);
'9' : ToggleMFlags('9',MFlags,Changed);
'A' : InputWN1('%LFNew ACS: ',LogonACS,(SizeOf(LogonACS) - 1),[InterActiveEdit],Changed);
'B' : InputPath('%LF^1Enter path to write door interface files to (^5End with a ^1"^5\^1"):%LF^4: ',
DoorPath,TRUE,FALSE,Changed);
'C' : InputByteWOC('%LFAnswer after ring number',AnswerOnRing,[DisplayValue,NumbersOnly],0,255);
'E' : MultiRing := NOT MultiRing;
'D' : InputWN1('%LF^1Enter new teleconference string:%LF^4: ',TeleConfNormal,(SizeOf(TeleConfNormal) - 1),
[ColorsAllowed,InterActiveEdit],Changed);
'F' : InputWN1('%LF^1Enter new teleconference string:%LF^4: ',TeleConfAnon,(SizeOf(TeleConfAnon) - 1),
[ColorsAllowed,InterActiveEdit],Changed);
'G' : InputWN1('%LF^1Enter new teleconference string:%LF^4: ',TeleConfGlobal,(SizeOf(TeleConfGlobal) - 1),
[ColorsAllowed,InterActiveEdit],Changed);
'H' : InputWN1('%LF^1Enter new teleconference string:%LF^4: ',TeleConfPrivate,(SizeOf(TeleConfPrivate) - 1),
[ColorsAllowed,InterActiveEdit],Changed);
'I' : InputWN1('%LFIRQ for %E MCI code: ',IRQ,(SizeOf(IRQ) - 1),[InterActiveEdit],Changed);
'J' : InputWN1('%LFAddress for %C MCI code: ',Address,(SizeOf(Address) - 1),[InterActiveEdit],Changed);
'R' : BEGIN
REPEAT
Abort := FALSE;
Next := FALSE;
Print('%CL^5Modem configuration - Result Codes');
NL;
PrintACR('^1A. NO CARRIER : ^5'+PadLeftStr(NOCARRIER,21)+'^1B. RELIABLE : ^5'+RELIABLE);
PrintACR('^1C. OK : ^5'+PadLeftStr(OK,21)+'^1D. RING : ^5'+RING);
PrintACR('^1E. CALLER ID : ^5'+PadLeftStr(CALLERID,21)+
'^1F. ID/User note : ^5'+ShowOnOff(UseCallerID));
FOR TempB := 1 TO MaxResultCodes DO
IF (NOT Odd(TempB)) THEN
Print('^1'+Chr(TempB + 70)+'. '+PadLeftStr(WhichBaud(TempB),14)+': ^5'+Connect[TempB])
ELSE
Prompt(PadLeftStr('^1'+Chr(TempB + 70)+'. '+PadLeftStr(WhichBaud(TempB),14)+': ^5'+Connect[TempB],40));
LOneK('%LFEnter selection [^5A^4-^5Z^4,^5<CR>^4=^5Quit^4]: ',Cmd,^M'ABCDEFGHIJKLMNOPQRSTUVWXYZ',TRUE,TRUE);
CASE Cmd OF
'A' : InputWN1('%LFEnter NO CARRIER string: ',NOCARRIER,(SizeOf(NOCARRIER) - 1),
[InterActiveEdit,UpperOnly],Changed);
'B' : InputWN1('%LFEnter RELIABLE string: ',RELIABLE,(SizeOf(RELIABLE) - 1),
[InterActiveEdit,UpperOnly],Changed);
'C' : InputWN1('%LFEnter OK string: ',OK,(SizeOf(OK) - 1),[InterActiveEdit,UpperOnly],Changed);
'D' : InputWN1('%LFEnter RING string: ',RING,(SizeOf(RING) - 1),[InterActiveEdit,UpperOnly],Changed);
'E' : InputWN1('%LFEnter Caller ID string: ',CALLERID,(SizeOf(CALLERID) - 1),
[InterActiveEdit,UpperOnly],Changed);
'F' : UseCallerID := NOT UseCallerID;
'G'..'Z' :
BEGIN
TempB := (Ord(Cmd) - 70);
IF (TempB IN [1..MaxResultCodes]) THEN
InputWN1('%LFEnter '+WhichBaud(TempB)+' string: ',Connect[TempB],(SizeOf(Connect[1]) - 1),
[InterActiveEdit,UpperOnly],Changed);
END;
END;
UNTIL (Cmd = ^M);
Cmd := #0;
END;
END;
END;
UNTIL (Cmd = 'Q') OR (HangUp);
Seek(LineFile,0);
Write(LineFile,Liner);
Close(LineFile);
LastError := IOResult;
END;
END.