{ File: SG4.UTIL2.TEXT
  Contains serial port configuration control routines.


  COPYRIGHT (c) 1983 SAGE Computer Technology
  All Rights Reserved

}

PROCEDURE GetBaud;
VAR
  Rate:INTEGER;
  C8251:BOOLEAN;
BEGIN
  WITH Config DO
    CASE Device OF
       1:Rate:=Terminal.BaudRate;
       7:Rate:=Remote.BaudRate;
      28:Rate:=XSerial1.BaudRate;
      29:Rate:=XSerial2.BaudRate;
      30:Rate:=XSerial3.BaudRate;
      31:Rate:=XSerial4.BaudRate;
    END;
  Rate:=Conf_RD_Conversion(Device,Conf_CvBaud,Rate);
  IF Rate = 19200 THEN MNU_Value:=D_BR19200
  ELSE
  IF Rate = 9600 THEN MNU_Value:=D_BR9600
  ELSE
  IF Rate = 4800 THEN MNU_Value:=D_BR4800
  ELSE
  IF Rate = 2400 THEN MNU_Value:=D_BR2400
  ELSE
  IF Rate = 2000 THEN MNU_Value:=D_BR2000
  ELSE
  IF Rate = 1800 THEN MNU_Value:=D_BR1800
  ELSE
  IF Rate = 1200 THEN MNU_Value:=D_BR1200
  ELSE
  IF Rate = 600 THEN MNU_Value:=D_BR600
  ELSE
  IF Rate = 300 THEN MNU_Value:=D_BR300
  ELSE
  IF Rate = 200 THEN MNU_Value:=D_BR200
  ELSE
  IF Rate = 150 THEN MNU_Value:=D_BR150
  ELSE
  IF Rate = 110 THEN MNU_Value:=D_BR110
  ELSE
  IF Rate =  75 THEN MNU_Value:=D_BR75
  ELSE
  IF Rate =  50 THEN MNU_Value:=D_BR50
  ELSE
    MNU_Value:=D_BRdipsw;
END;

PROCEDURE PutBaud;
VAR
  Rate:INTEGER;
BEGIN
  Rate:=MNU_General;
  IF Rate = 200 THEN
    IF Device IN [28,29,30,31] THEN
      BEGIN
	MNU_Error;
	WRITE('Illegal setting for Extra Serial Channel');
	MNU_Reject:=TRUE;
	EXIT(PutBaud);
      END;
  Rate:=Conf_WT_Conversion(Device,Conf_CvBaud,Rate);
  WITH Config DO
    CASE Device OF
       1:Terminal.BaudRate:=Rate;
       7:Remote.BaudRate:=Rate;
      28:XSerial1.BaudRate:=Rate;
      29:XSerial2.BaudRate:=Rate;
      30:XSerial3.BaudRate:=Rate;
      31:XSerial4.BaudRate:=Rate;
    END;
END;

PROCEDURE GetParity;
VAR
  Even,Enable:BOOLEAN;
  Rate:INTEGER;
BEGIN
  WITH Config DO
    CASE Device OF
       1:BEGIN
	   Even:=Terminal.ParityEven;
	   Enable:=Terminal.ParityEnable;
	   Rate:=Terminal.BaudRate;
	 END;
       7:BEGIN
	   Even:=Remote.ParityEven;
	   Enable:=Remote.ParityEnable;
	 END;
      28:BEGIN
	   Even:=XSerial1.ParityEven;
	   Enable:=XSerial1.ParityEnable;
	 END;
      29:BEGIN
	   Even:=XSerial2.ParityEven;
	   Enable:=XSerial2.ParityEnable;
	 END;
      30:BEGIN
	   Even:=XSerial3.ParityEven;
	   Enable:=XSerial3.ParityEnable;
	 END;
      31:BEGIN
	   Even:=XSerial4.ParityEven;
	   Enable:=XSerial4.ParityEnable;
	 END;
    END;
  IF (Device=1) AND (Rate = 0) THEN
    MNU_Value:=D_DipP
  ELSE
    IF Enable THEN
      BEGIN
	IF Even THEN MNU_Value:=D_EvenP ELSE MNU_Value:=D_OddP;
      END
    ELSE
      MNU_Value:=D_DisP;
END;

PROCEDURE PutParity;
VAR
  Even,Enable:BOOLEAN;
BEGIN
  IF (Device=1) AND ((Config.Terminal.BaudRate = 0) AND
     (MNU_ItemNumber <> D_DipP)) OR
     ((Config.Terminal.BaudRate <> 0) AND (MNU_ItemNumber = D_DipP)) THEN
    BEGIN
      MNU_Error;
      WRITE('Must remove dip switch selection from Baud Rate');
      MNU_Reject:=TRUE;
      Even:=TRUE;
      Enable:=TRUE;
    END
  ELSE
    BEGIN
      IF MNU_ItemNumber = D_EvenP THEN
	BEGIN
	  Even:=TRUE;
	  Enable:=TRUE;
	END
      ELSE
	IF MNU_ItemNumber = D_OddP THEN
	  BEGIN
	    Even:=FALSE;
	    Enable:=TRUE;
	  END
	ELSE
	  IF MNU_ItemNumber = D_DisP THEN
	    BEGIN
	      EVEN:=True;
	      Enable:=FALSE;
	    END;
      WITH Config DO
	CASE Device OF
	  1:BEGIN
	      Terminal.ParityEven:=Even;
	      Terminal.ParityEnable:=Enable;
	    END;
	  7:BEGIN
	      Remote.ParityEven:=Even;
	      Remote.ParityEnable:=Enable;
	    END;
	  28:BEGIN
	      XSerial1.ParityEven:=Even;
	      XSerial1.ParityEnable:=Enable;
	     END;
	  29:BEGIN
	      XSerial2.ParityEven:=Even;
	      XSerial2.ParityEnable:=Enable;
	     END;
	  30:BEGIN
	      XSerial3.ParityEven:=Even;
	      XSerial3.ParityEnable:=Enable;
	     END;
	  31:BEGIN
	      XSerial4.ParityEven:=Even;
	      XSerial4.ParityEnable:=Enable;
	     END;
	END;
    END;
END;

PROCEDURE GetStop;
VAR
  Stop:Conf_StopBits;
BEGIN
  WITH Config DO
    CASE Device OF
       1:Stop:=Terminal.StopBits;
       7:Stop:=Remote.StopBits;
      28:Stop:=XSerial1.StopBits;
      29:Stop:=XSerial2.StopBits;
      30:Stop:=XSerial3.StopBits;
      31:Stop:=XSerial4.StopBits;
    END;
  IF Stop = Conf_1Stop THEN MNU_Value:=D_1Stop
  ELSE
    IF Stop=Conf_1_5Stop THEN MNU_Value:=D_1_5Stop
    ELSE
      IF Stop=Conf_2Stop THEN MNU_Value:=D_2Stop
      ELSE
	MNU_Value:=0;
END;

PROCEDURE CheckStop;
BEGIN
  GetStop;
  MNU_Boolean:= MNU_Value = MNU_ItemNumber;
END;

PROCEDURE PutStop;
VAR
  Stop:Conf_StopBits;
BEGIN
  IF MNU_ItemNumber=D_1Stop THEN Stop:=Conf_1Stop
  ELSE
    IF MNU_ItemNumber=D_1_5Stop THEN Stop:=Conf_1_5Stop
    ELSE
      IF MNU_ItemNumber=D_2Stop THEN Stop:=Conf_2Stop
      ELSE
	Stop:=Conf_Invalid;
  WITH Config DO
    CASE Device OF
       1:Terminal.StopBits:=Stop;
       7:Remote.StopBits:=Stop;
      28:XSerial1.StopBits:=Stop;
      29:XSerial2.StopBits:=Stop;
      30:XSerial3.StopBits:=Stop;
      31:XSerial4.StopBits:=Stop;
    END;
END;

PROCEDURE GetData;
VAR
  Data:Conf_DataBits;
BEGIN
  WITH Config DO
    CASE Device OF
       1:Data:=Terminal.DataBits;
       7:Data:=Remote.DataBits;
      28:Data:=XSerial1.DataBits;
      29:Data:=XSerial2.DataBits;
      30:Data:=XSerial3.DataBits;
      31:Data:=XSerial4.DataBits;
    END;
  IF Data = Conf_5Data THEN MNU_Value:=D_5Data
  ELSE
    IF Data=Conf_6Data THEN MNU_Value:=D_6Data
    ELSE
      IF Data=Conf_7Data THEN MNU_Value:=D_7Data
      ELSE
	IF Data=Conf_8Data THEN MNU_Value:=D_8Data
	ELSE
	  MNU_Value:=0;
END;

PROCEDURE CheckData;
BEGIN
  GetData;
  MNU_Boolean:=MNU_Value = MNU_ItemNumber;
END;

PROCEDURE PutData;
VAR
  Data:Conf_DataBits;
BEGIN
  IF MNU_ItemNumber=D_8Data THEN Data:=Conf_8Data
  ELSE
    IF MNU_ItemNumber=D_7Data THEN Data:=Conf_7Data
    ELSE
      IF MNU_ItemNumber=D_6Data THEN Data:=Conf_6Data
      ELSE
	IF MNU_ItemNumber=D_5Data THEN Data:=Conf_5Data
	ELSE
	  Data:=Conf_8Data;
  WITH Config DO
    CASE Device OF
       1:Terminal.DataBits:=Data;
       7:Remote.DataBits:=Data;
      28:XSerial1.DataBits:=Data;
      29:XSerial2.DataBits:=Data;
      30:XSerial3.DataBits:=Data;
      31:XSerial4.DataBits:=Data;
    END;
END;

PROCEDURE GetRXonIn;
BEGIN
  WITH Config DO
    CASE Device OF
      1:MNU_Boolean:=Terminal.XonXoffFlag;
      7:MNU_Boolean:=Remote.XONin;
     28:MNU_Boolean:=XSerial1.XONin;
     29:MNU_Boolean:=XSerial2.XONin;
     30:MNU_Boolean:=XSerial3.XONin;
     31:MNU_Boolean:=XSerial4.XONin;
    END;
END;

PROCEDURE PutRXonIn;
BEGIN
  WITH Config DO
    CASE Device OF
      1:Terminal.XonXoffFlag:=MNU_Boolean;
      7:Remote.XONin:=MNU_Boolean;
     28:XSerial1.XONin:=MNU_Boolean;
     29:XSerial2.XONin:=MNU_Boolean;
     30:XSerial3.XONin:=MNU_Boolean;
     31:XSerial4.XONin:=MNU_Boolean;
    END;
END;

PROCEDURE GetRXonOut;
BEGIN
  WITH Config DO
    CASE Device OF
      7:MNU_Boolean:=Remote.XONout;
     28:MNU_Boolean:=XSerial1.XONout;
     29:MNU_Boolean:=XSerial2.XONout;
     30:MNU_Boolean:=XSerial3.XONout;
     31:MNU_Boolean:=XSerial4.XONout;
    END;
END;

PROCEDURE PutRXonOut;
BEGIN
  WITH Config DO
    CASE Device OF
      7:Remote.XONout:=MNU_Boolean;
     28:XSerial1.XONout:=MNU_Boolean;
     29:XSerial2.XONout:=MNU_Boolean;
     30:XSerial3.XONout:=MNU_Boolean;
     31:XSerial4.XONout:=MNU_Boolean;
    END;
END;

PROCEDURE GetDSR;
BEGIN
  WITH Config DO
    CASE Device OF
      7:MNU_Boolean:=Remote.DSR_Polling;
     28:MNU_Boolean:=XSerial1.DSR_Polling;
     29:MNU_Boolean:=XSerial2.DSR_Polling;
     30:MNU_Boolean:=XSerial3.DSR_Polling;
     31:MNU_Boolean:=XSerial4.DSR_Polling;
    END;
END;

PROCEDURE PutDSR;
BEGIN
  WITH Config DO
    CASE Device OF
      7:Remote.DSR_Polling:=MNU_Boolean;
     28:XSerial1.DSR_Polling:=MNU_Boolean;
     29:XSerial2.DSR_Polling:=MNU_Boolean;
     30:XSerial3.DSR_Polling:=MNU_Boolean;
     31:XSerial4.DSR_Polling:=MNU_Boolean;
    END;
END;

PROCEDURE GetDSRinter;
BEGIN
  WITH Config DO
    CASE Device OF
      7:MNU_Value:=Remote.PollDelay;
     28:MNU_Value:=XSerial1.PollDelay;
     29:MNU_Value:=XSerial2.PollDelay;
     30:MNU_Value:=XSerial3.PollDelay;
     31:MNU_Value:=XSerial4.PollDelay;
    END;
END;

PROCEDURE PutDSRinter;
BEGIN
  WITH Config DO
    CASE Device OF
      7:Remote.PollDelay:=MNU_Value;
     28:XSerial1.PollDelay:=MNU_Value;
     29:XSerial2.PollDelay:=MNU_Value;
     30:XSerial3.PollDelay:=MNU_Value;
     31:XSerial4.PollDelay:=MNU_Value;
    END;
END;

                                                                                                                                                                                                                                                                                                                                                 