(* UNIT RawCon;	    Transparent Console	    29 Jul 83
   *)

(* N O T I C E	 ***   N O T I C E   ***   N O T I C E	 ***   N O T I C E *)
(*									   *)
(*		      Copyright 1979 - 1983, RB&A.			   *)
(*									   *)
(*	  Use by USUS members for non-commercial purposes encouraged.	   *)
(*			All other rights reserved.			   *)
(*									   *)
(* N O T I C E	 ***   N O T I C E   ***   N O T I C E	 ***   N O T I C E *)

(*$C Copyright 1979 - 1983, RB&A.  All rights reserved.*)

(*$D Break+ *)	(* User Break is disabled if this option is + *)

(*$D Sage+  *)

(* Change log:
   26 Jul 83 Sage conditional added
   03 Jul 83 hoked up for TeleTalker
   |xjm$d|nx|f8|ejb|.
   *)


UNIT RawConsole;

INTERFACE

IMPLEMENTATION

USES
    (*$U #4:Kernel.Code *)
	(*$L-*)
	Kernel;
	(*$L+*)
(*$L-*)(*$T R A W C O N	  -   D e c l a r a t i o n s  *)
(*$L+*)(*$P*)
(*$B Sage *)

CONST

	ConfigPort	= 128;	    (* see Sage manual *)


TYPE

	Config		= PACKED RECORD
	    Baud	: INTEGER;
	    DebugEnab	: BOOLEAN;
	    OutFlow	: BOOLEAN;
	    Fill0	: 0..63;
	    TimesClock	: 0..3;
	    BitsOver5	: 0..3;
	    Enable	: BOOLEAN;
	    EvenParity	: BOOLEAN;
	    SBits	: 1..3
	    END;
(*$E Sage *)


VAR

	OldStop		: CHAR;
	OldFlush	: CHAR;

	(*$B Break *)
	OldBreak	: BOOLEAN;
	(*$E Break *)

	(*$B Sage *)
	OldConfig	: Config;
	(*$E Sage *)
(*$L-*)(*$T R A W C O N	  -   P r o c e d u r e s   *)
(*$L+*)(*$P*)

(*$B Sage *)

PROCEDURE ReConfigure;
VAR
	NewConfig	: Config;
BEGIN
	UNITREAD (ConfigPort, OldConfig, SIZEOF(Config), 0, 2);

	NewConfig := OldConfig;
	WITH NewConfig DO BEGIN
	    OutFlow   := FALSE;
	    DebugEnab := TRUE
	    END;
	UNITWRITE (ConfigPort, NewConfig, SIZEOF(Config), 0, 2)
	END;

(*$E Sage *)
(*$L-*)(*$T R A W C O N	  -   M a i n	P r o c e d u r e   *)
(*$L+*)(*$P*)

BEGIN (*RawCon *)

	(*$B Sage *)
	ReConfigure;
	(*$E Sage *)

	WITH SysCom^ DO BEGIN
	    OldStop	     := CrtInfo.Stop;
	    CrtInfo.Stop     := CHR(0);
	    OldFlush	     := CrtInfo.Flush;
	    CrtInfo.Flush    := CHR(0);
	    (*$B Break *)
	    OldBreak	     := MiscInfo.NoBreak;
	    MiscInfo.NoBreak := TRUE
	    (*$E Break *)
	    END;

	***;

	WITH SysCom^ DO BEGIN
	    CrtInfo.Stop     := OldStop;
	    CrtInfo.Flush    := OldFlush;
	    (*$B Break *)
	    MiscInfo.NoBreak := OldBreak
	    (*$E Break *)
	    END;
	
	(*$B Sage *)
	UNITWRITE (ConfigPort, OldConfig, SIZEOF(Config), 0, 2)
	(*$E Sage *)

	END.
                           